@corbe30/fortune-excel 2.3.2 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.gitattributes ADDED
@@ -0,0 +1,4 @@
1
+ * text=auto eol=lf
2
+
3
+ *.bat eol=crlf
4
+ *.ps1 eol=crlf
@@ -14,7 +14,7 @@ jobs:
14
14
  - uses: actions/checkout@v3
15
15
  - uses: actions/setup-node@v3
16
16
  with:
17
- node-version: "20.x"
17
+ node-version: "24.x"
18
18
  registry-url: "https://registry.npmjs.org"
19
19
  - run: npm ci
20
20
  - run: npm publish --tag latest --provenance --access public
@@ -0,0 +1,27 @@
1
+ name: test
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ node-version:
14
+ - "22.x"
15
+ - "24.x"
16
+ - "26.x"
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - uses: actions/setup-node@v4
22
+ with:
23
+ node-version: ${{ matrix.node-version }}
24
+ cache: npm
25
+
26
+ - run: npm ci
27
+ - run: npm test
package/README.md CHANGED
@@ -100,7 +100,7 @@ Export support:
100
100
  - [Orleans9](https://blog.csdn.net/zinchliang) - [article](https://blog.csdn.net/zinchliang/article/details/120262185)
101
101
 
102
102
  ## Contribution
103
- 1. Install node v20.17.0
103
+ 1. Install node v24
104
104
  3. `npm run prepare`
105
105
  4. `npm run build-storybook`
106
106
  5. `npm run storybook`
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setHiddenRowCol = void 0;
3
+ exports.setHiddenRowCol = setHiddenRowCol;
4
4
  function setHiddenRowCol(table, worksheet) {
5
5
  var _a, _b;
6
6
  for (var row in (_a = table.config) === null || _a === void 0 ? void 0 : _a.rowhidden) {
@@ -10,4 +10,3 @@ function setHiddenRowCol(table, worksheet) {
10
10
  worksheet.getColumn(parseInt(col) + 1).hidden = true;
11
11
  }
12
12
  }
13
- exports.setHiddenRowCol = setHiddenRowCol;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -32,8 +42,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
32
42
  });
33
43
  };
34
44
  var __generator = (this && this.__generator) || function (thisArg, body) {
35
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
45
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
46
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
47
  function verb(n) { return function (v) { return step([n, v]); }; }
38
48
  function step(op) {
39
49
  if (f) throw new TypeError("Generator is already executing.");
@@ -62,7 +72,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
62
72
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
73
  };
64
74
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.exportSheetExcel = void 0;
75
+ exports.exportSheetExcel = exportSheetExcel;
66
76
  var exceljs_1 = __importDefault(require("exceljs"));
67
77
  var fileSaver = __importStar(require("file-saver"));
68
78
  var ExcelStyle_1 = require("./ExcelStyle");
@@ -72,10 +82,10 @@ var ExcelBorder_1 = require("./ExcelBorder");
72
82
  var ExcelValidation_1 = require("./ExcelValidation");
73
83
  var ExcelConfig_1 = require("./ExcelConfig");
74
84
  var ICommon_1 = require("../common/ICommon");
75
- function exportSheetExcel(luckysheetRef, fileType, download) {
76
- if (download === void 0) { download = true; }
77
- return __awaiter(this, void 0, void 0, function () {
85
+ function exportSheetExcel(luckysheetRef_1, fileType_1) {
86
+ return __awaiter(this, arguments, void 0, function (luckysheetRef, fileType, download) {
78
87
  var luckysheet, workbook, fileData, buffer, buffer;
88
+ if (download === void 0) { download = true; }
79
89
  return __generator(this, function (_a) {
80
90
  switch (_a.label) {
81
91
  case 0:
@@ -113,4 +123,3 @@ function exportSheetExcel(luckysheetRef, fileType, download) {
113
123
  });
114
124
  });
115
125
  }
116
- exports.exportSheetExcel = exportSheetExcel;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setDataValidations = void 0;
3
+ exports.setDataValidations = setDataValidations;
4
4
  var constant_1 = require("../common/constant");
5
5
  function rowColToCell(rowColumn) {
6
6
  var _a = rowColumn.split("_").map(Number), row = _a[0], col = _a[1];
@@ -64,4 +64,3 @@ function setDataValidations(table, worksheet) {
64
64
  worksheet.getCell(cell).dataValidation = getExcelValidation(table.dataVerification[key]);
65
65
  }
66
66
  }
67
- exports.setDataValidations = setDataValidations;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __rest = (this && this.__rest) || function (s, e) {
3
14
  var t = {};
4
15
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -437,7 +448,11 @@ var FortuneFile = /** @class */ (function () {
437
448
  sheetout.calcChain = sheet.calcChain;
438
449
  }
439
450
  if (sheet.images != null) {
440
- sheetout.images = sheet.images;
451
+ sheetout.images = Object.entries(sheet.images).map(function (_a) {
452
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
453
+ var id = _a[0], image = _a[1];
454
+ return (__assign(__assign({}, image), { id: id, left: (_c = (_b = image.default) === null || _b === void 0 ? void 0 : _b.left) !== null && _c !== void 0 ? _c : 0, top: (_e = (_d = image.default) === null || _d === void 0 ? void 0 : _d.top) !== null && _e !== void 0 ? _e : 0, width: (_h = (_g = (_f = image.default) === null || _f === void 0 ? void 0 : _f.width) !== null && _g !== void 0 ? _g : image.originWidth) !== null && _h !== void 0 ? _h : 0, height: (_l = (_k = (_j = image.default) === null || _j === void 0 ? void 0 : _j.height) !== null && _k !== void 0 ? _k : image.originHeight) !== null && _l !== void 0 ? _l : 0 }));
455
+ });
441
456
  }
442
457
  if (sheet.dataVerification != null) {
443
458
  sheetout.dataVerification = sheet.dataVerification;
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
@@ -46,23 +46,23 @@ var HandleZip = /** @class */ (function () {
46
46
  this.uploadFile = file;
47
47
  }
48
48
  HandleZip.prototype.unzipFile = function () {
49
- var _a;
50
49
  return __awaiter(this, void 0, void 0, function () {
51
- var zip, fileList, _i, _b, _c, _path, zipEntry, fileName, fileNameArr, suffix, fileType, data;
50
+ var zip, fileList, _i, _a, _b, _path, zipEntry, fileName, fileNameArr, suffix, fileType, data;
51
+ var _c;
52
52
  return __generator(this, function (_d) {
53
53
  switch (_d.label) {
54
54
  case 0: return [4 /*yield*/, jszip_1.default.loadAsync(this.uploadFile)];
55
55
  case 1:
56
56
  zip = _d.sent();
57
57
  fileList = {};
58
- _i = 0, _b = Object.entries(zip.files);
58
+ _i = 0, _a = Object.entries(zip.files);
59
59
  _d.label = 2;
60
60
  case 2:
61
- if (!(_i < _b.length)) return [3 /*break*/, 5];
62
- _c = _b[_i], _path = _c[0], zipEntry = _c[1];
61
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
62
+ _b = _a[_i], _path = _b[0], zipEntry = _b[1];
63
63
  fileName = zipEntry.name;
64
64
  fileNameArr = fileName.split(".");
65
- suffix = (_a = fileNameArr[fileNameArr.length - 1]) === null || _a === void 0 ? void 0 : _a.toLowerCase();
65
+ suffix = (_c = fileNameArr[fileNameArr.length - 1]) === null || _c === void 0 ? void 0 : _c.toLowerCase();
66
66
  fileType = "string";
67
67
  if (suffix in
68
68
  {
@@ -42,7 +42,7 @@ export interface IfortuneSheet {
42
42
  export interface IfortuneSheetSelection {
43
43
  row: number[];
44
44
  column: number[];
45
- sheetIndex: number;
45
+ sheetIndex: string;
46
46
  }
47
47
  export interface IfortuneSheetChart {
48
48
  }
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
@@ -15,7 +15,9 @@ var __extends = (this && this.__extends) || (function () {
15
15
  };
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.getlineStringAttr = exports.getColor = exports.Element = exports.ReadXml = void 0;
18
+ exports.Element = exports.ReadXml = void 0;
19
+ exports.getColor = getColor;
20
+ exports.getlineStringAttr = getlineStringAttr;
19
21
  var constant_1 = require("../common/constant");
20
22
  var method_1 = require("../common/method");
21
23
  var xmloperation = /** @class */ (function () {
@@ -323,7 +325,6 @@ function getColor(color, styles, type) {
323
325
  }
324
326
  return bg;
325
327
  }
326
- exports.getColor = getColor;
327
328
  /**
328
329
  * @dom xml attribute object
329
330
  * @attr attribute name
@@ -366,4 +367,3 @@ function getlineStringAttr(frpr, attr) {
366
367
  }
367
368
  return value;
368
369
  }
369
- exports.getlineStringAttr = getlineStringAttr;
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
14
  function verb(n) { return function (v) { return step([n, v]); }; }
15
15
  function step(op) {
16
16
  if (f) throw new TypeError("Generator is already executing.");
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -32,8 +42,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
32
42
  });
33
43
  };
34
44
  var __generator = (this && this.__generator) || function (thisArg, body) {
35
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
45
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
46
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
47
  function verb(n) { return function (v) { return step([n, v]); }; }
38
48
  function step(op) {
39
49
  if (f) throw new TypeError("Generator is already executing.");
@@ -58,6 +68,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
58
68
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
69
  }
60
70
  };
71
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
72
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
73
+ if (ar || !(i in from)) {
74
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
75
+ ar[i] = from[i];
76
+ }
77
+ }
78
+ return to.concat(ar || Array.prototype.slice.call(from));
79
+ };
61
80
  Object.defineProperty(exports, "__esModule", { value: true });
62
81
  exports.transformFortuneToExcel = exports.transformExcelToFortune = void 0;
63
82
  var FortuneFile_1 = require("../ToFortuneSheet/FortuneFile");
@@ -126,11 +145,15 @@ var transformExcelToFortune = function (file, setSheets, setKey, sheetRef) { ret
126
145
  });
127
146
  }); };
128
147
  exports.transformExcelToFortune = transformExcelToFortune;
129
- var transformFortuneToExcel = function (luckysheetRef, fileType, download) {
130
- if (fileType === void 0) { fileType = ICommon_1.IFileType.XLSX; }
131
- if (download === void 0) { download = true; }
132
- return __awaiter(void 0, void 0, void 0, function () {
148
+ var transformFortuneToExcel = function (luckysheetRef_1) {
149
+ var args_1 = [];
150
+ for (var _i = 1; _i < arguments.length; _i++) {
151
+ args_1[_i - 1] = arguments[_i];
152
+ }
153
+ return __awaiter(void 0, __spreadArray([luckysheetRef_1], args_1, true), void 0, function (luckysheetRef, fileType, download) {
133
154
  var result;
155
+ if (fileType === void 0) { fileType = ICommon_1.IFileType.XLSX; }
156
+ if (download === void 0) { download = true; }
134
157
  return __generator(this, function (_a) {
135
158
  switch (_a.label) {
136
159
  case 0: return [4 /*yield*/, (0, ExcelFile_1.exportSheetExcel)(luckysheetRef, fileType, download)];
@@ -5,7 +5,7 @@ export declare function getRangetxt(range: IfortuneSheetSelection, sheettxt: str
5
5
  export declare function getcellrange(txt: string, sheets?: IattributeList, sheetId?: string): {
6
6
  row: number[];
7
7
  column: number[];
8
- sheetIndex: number;
8
+ sheetIndex: string;
9
9
  };
10
10
  /**
11
11
  * @return ratio, default 0.75 1in = 2.54cm = 25.4mm = 72pt = 6pc, pt = 1/72 In, px = 1/dpi In
@@ -1,6 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rgb2hex = exports.getObjType = exports.setMerge = exports.getMultiFormulaValue = exports.getPeelOffX14 = exports.getTransR1C1ToSequence = exports.getSingleSequenceToNum = exports.getSqrefRawArrFormat = exports.getRegionSequence = exports.getMultiSequenceToNum = exports.isContainMultiType = exports.isKoera = exports.isJapanese = exports.isChinese = exports.fromulaRef = exports.escapeCharacter = exports.generateRandomIndex = exports.LightenDarkenColor = exports.getRowHeightPixel = exports.getColumnWidthPixel = exports.getXmlAttibute = exports.getPxByEMUs = exports.getptToPxRatioByDPI = exports.getcellrange = exports.getRangetxt = void 0;
3
+ exports.rgb2hex = exports.getObjType = exports.setMerge = exports.fromulaRef = void 0;
4
+ exports.getRangetxt = getRangetxt;
5
+ exports.getcellrange = getcellrange;
6
+ exports.getptToPxRatioByDPI = getptToPxRatioByDPI;
7
+ exports.getPxByEMUs = getPxByEMUs;
8
+ exports.getXmlAttibute = getXmlAttibute;
9
+ exports.getColumnWidthPixel = getColumnWidthPixel;
10
+ exports.getRowHeightPixel = getRowHeightPixel;
11
+ exports.LightenDarkenColor = LightenDarkenColor;
12
+ exports.generateRandomIndex = generateRandomIndex;
13
+ exports.escapeCharacter = escapeCharacter;
14
+ exports.isChinese = isChinese;
15
+ exports.isJapanese = isJapanese;
16
+ exports.isKoera = isKoera;
17
+ exports.isContainMultiType = isContainMultiType;
18
+ exports.getMultiSequenceToNum = getMultiSequenceToNum;
19
+ exports.getRegionSequence = getRegionSequence;
20
+ exports.getSqrefRawArrFormat = getSqrefRawArrFormat;
21
+ exports.getSingleSequenceToNum = getSingleSequenceToNum;
22
+ exports.getTransR1C1ToSequence = getTransR1C1ToSequence;
23
+ exports.getPeelOffX14 = getPeelOffX14;
24
+ exports.getMultiFormulaValue = getMultiFormulaValue;
4
25
  var constant_1 = require("./constant");
5
26
  function getRangetxt(range, sheettxt) {
6
27
  var row0 = range["row"][0], row1 = range["row"][1];
@@ -25,25 +46,24 @@ function getRangetxt(range, sheettxt) {
25
46
  }
26
47
  }
27
48
  }
28
- exports.getRangetxt = getRangetxt;
29
49
  function getcellrange(txt, sheets, sheetId) {
30
50
  if (sheets === void 0) { sheets = {}; }
31
51
  if (sheetId === void 0) { sheetId = "1"; }
32
52
  var val = txt.split("!");
33
- var sheettxt = "", rangetxt = "", sheetIndex = -1;
53
+ var sheettxt = "", rangetxt = "", sheetIndex = sheetId;
34
54
  if (val.length > 1) {
35
55
  sheettxt = val[0];
36
56
  rangetxt = val[1];
37
57
  var si = sheets[sheettxt];
38
58
  if (si == null) {
39
- sheetIndex = parseInt(sheetId);
59
+ sheetIndex = sheetId;
40
60
  }
41
61
  else {
42
- sheetIndex = parseInt(si);
62
+ sheetIndex = si;
43
63
  }
44
64
  }
45
65
  else {
46
- sheetIndex = parseInt(sheetId);
66
+ sheetIndex = sheetId;
47
67
  rangetxt = val[0];
48
68
  }
49
69
  if (rangetxt.indexOf(":") == -1) {
@@ -92,7 +112,6 @@ function getcellrange(txt, sheets, sheetId) {
92
112
  };
93
113
  }
94
114
  }
95
- exports.getcellrange = getcellrange;
96
115
  //列下标 字母转数字
97
116
  function ABCatNum(abc) {
98
117
  abc = abc.toUpperCase();
@@ -153,7 +172,6 @@ function chatatABC(index) {
153
172
  function getptToPxRatioByDPI() {
154
173
  return 72 / 96;
155
174
  }
156
- exports.getptToPxRatioByDPI = getptToPxRatioByDPI;
157
175
  /**
158
176
  * @emus EMUs, Excel drawing unit
159
177
  * @return pixel
@@ -167,7 +185,6 @@ function getPxByEMUs(emus) {
167
185
  var px = pt / getptToPxRatioByDPI();
168
186
  return px;
169
187
  }
170
- exports.getPxByEMUs = getPxByEMUs;
171
188
  /**
172
189
  * @dom xml attribute object
173
190
  * @attr attribute name
@@ -179,7 +196,6 @@ function getXmlAttibute(dom, attr, d) {
179
196
  value = value == null ? d : value;
180
197
  return value;
181
198
  }
182
- exports.getXmlAttibute = getXmlAttibute;
183
199
  /**
184
200
  * @columnWidth Excel column width
185
201
  * @return pixel column width
@@ -188,7 +204,6 @@ function getColumnWidthPixel(columnWidth) {
188
204
  var pix = Math.round((columnWidth - 0.83) * 8 + 5);
189
205
  return pix;
190
206
  }
191
- exports.getColumnWidthPixel = getColumnWidthPixel;
192
207
  /**
193
208
  * @rowHeight Excel row height
194
209
  * @return pixel row height
@@ -197,7 +212,6 @@ function getRowHeightPixel(rowHeight) {
197
212
  var pix = Math.round(rowHeight / getptToPxRatioByDPI());
198
213
  return pix;
199
214
  }
200
- exports.getRowHeightPixel = getRowHeightPixel;
201
215
  function LightenDarkenColor(sixColor, tint) {
202
216
  var hex = sixColor.substring(sixColor.length - 6, sixColor.length);
203
217
  var rgbArray = hexToRgbArray("#" + hex);
@@ -214,7 +228,6 @@ function LightenDarkenColor(sixColor, tint) {
214
228
  var newRgbArray = hslToRgb(hslArray[0], hslArray[1], hslArray[2]);
215
229
  return rgbToHex("RGB(" + newRgbArray.join(",") + ")");
216
230
  }
217
- exports.LightenDarkenColor = LightenDarkenColor;
218
231
  function rgbToHex(rgb) {
219
232
  //十六进制颜色值的正则表达式
220
233
  var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
@@ -359,7 +372,6 @@ function generateRandomIndex(prefix) {
359
372
  var time = new Date().getTime();
360
373
  return prefix + "_" + mid + "_" + time;
361
374
  }
362
- exports.generateRandomIndex = generateRandomIndex;
363
375
  function escapeCharacter(str) {
364
376
  if (str == null || str.length == 0) {
365
377
  return str;
@@ -467,7 +479,6 @@ function escapeCharacter(str) {
467
479
  .replace(/&thorn;/g, "þ")
468
480
  .replace(/&yuml;/g, "ÿ");
469
481
  }
470
- exports.escapeCharacter = escapeCharacter;
471
482
  var fromulaRef = /** @class */ (function () {
472
483
  function fromulaRef() {
473
484
  }
@@ -826,21 +837,18 @@ function isChinese(temp) {
826
837
  return false;
827
838
  return true;
828
839
  }
829
- exports.isChinese = isChinese;
830
840
  function isJapanese(temp) {
831
841
  var re = /[^\u0800-\u4e00]/;
832
842
  if (re.test(temp))
833
843
  return false;
834
844
  return true;
835
845
  }
836
- exports.isJapanese = isJapanese;
837
846
  function isKoera(chr) {
838
847
  if ((chr > 0x3130 && chr < 0x318f) || (chr >= 0xac00 && chr <= 0xd7a3)) {
839
848
  return true;
840
849
  }
841
850
  return false;
842
851
  }
843
- exports.isKoera = isKoera;
844
852
  function isContainMultiType(str) {
845
853
  var isUnicode = false;
846
854
  if (escape(str).indexOf("%u") > -1) {
@@ -860,7 +868,6 @@ function isContainMultiType(str) {
860
868
  }
861
869
  return false;
862
870
  }
863
- exports.isContainMultiType = isContainMultiType;
864
871
  /**
865
872
  * multi sequence conversion
866
873
  * example:
@@ -887,7 +894,6 @@ function getMultiSequenceToNum(sqref) {
887
894
  }
888
895
  return resArr;
889
896
  }
890
- exports.getMultiSequenceToNum = getMultiSequenceToNum;
891
897
  /**
892
898
  * get region sequence
893
899
  * example:
@@ -913,7 +919,6 @@ function getRegionSequence(arr) {
913
919
  }
914
920
  return formatArr;
915
921
  }
916
- exports.getRegionSequence = getRegionSequence;
917
922
  /**
918
923
  * unified processing of conversion formats
919
924
  * example:
@@ -935,7 +940,6 @@ function getSqrefRawArrFormat(arr) {
935
940
  var resultArr = arr.filter(function (value, index, array) { return array.indexOf(value) === index; });
936
941
  return resultArr;
937
942
  }
938
- exports.getSqrefRawArrFormat = getSqrefRawArrFormat;
939
943
  /**
940
944
  * single sequence to number
941
945
  * example:
@@ -961,7 +965,6 @@ function getSingleSequenceToNum(sqref) {
961
965
  }
962
966
  return ret.substring(0, ret.length - 1);
963
967
  }
964
- exports.getSingleSequenceToNum = getSingleSequenceToNum;
965
968
  /**
966
969
  * R1C1 to Sequence
967
970
  * example: sheet2!R1C1 => sheet!A1
@@ -982,7 +985,6 @@ function getTransR1C1ToSequence(value) {
982
985
  var column = chatatABC(Number(repStr.slice(indexC + 1, repStr === null || repStr === void 0 ? void 0 : repStr.length)) - 1);
983
986
  return "".concat(valueArr[0], "!").concat(column).concat(row);
984
987
  }
985
- exports.getTransR1C1ToSequence = getTransR1C1ToSequence;
986
988
  /**
987
989
  * strip x14 format data
988
990
  *
@@ -1015,7 +1017,6 @@ function getPeelOffX14(value) {
1015
1017
  sqref: sqref,
1016
1018
  };
1017
1019
  }
1018
- exports.getPeelOffX14 = getPeelOffX14;
1019
1020
  /**
1020
1021
  * get the value in the formula
1021
1022
  *
@@ -1040,7 +1041,6 @@ function getMultiFormulaValue(value) {
1040
1041
  }
1041
1042
  return retArr;
1042
1043
  }
1043
- exports.getMultiFormulaValue = getMultiFormulaValue;
1044
1044
  var setMerge = function (luckyMerge, worksheet) {
1045
1045
  if (luckyMerge === void 0) { luckyMerge = {}; }
1046
1046
  var mergearr = Object.values(luckyMerge);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "src/*"
5
5
  ],
6
- "version": "2.3.2",
6
+ "version": "2.3.3",
7
7
  "description": "An Excel import/export import library for FortuneSheet",
8
8
  "main": "dist/main.js",
9
9
  "types": "dist/main.d.ts",
@@ -23,7 +23,7 @@
23
23
  "@babel/preset-env": "^7.26.0",
24
24
  "@babel/preset-react": "^7.26.3",
25
25
  "@babel/preset-typescript": "^7.26.0",
26
- "@fortune-sheet/react": "^0.19.2",
26
+ "@fortune-sheet/react": "^1.0.4",
27
27
  "@storybook/addon-essentials": "^7.6.12",
28
28
  "@storybook/addon-interactions": "^7.6.12",
29
29
  "@storybook/addon-links": "^7.6.12",
@@ -32,6 +32,7 @@
32
32
  "@storybook/react-webpack5": "^7.3.2",
33
33
  "@storybook/test": "^7.6.12",
34
34
  "@types/node": "^20.11.16",
35
+ "jsdom": "^26.1.0",
35
36
  "react": "^18.2.0",
36
37
  "react-dom": "^18.2.0",
37
38
  "storybook": "^7.6.16",
@@ -47,6 +48,7 @@
47
48
  },
48
49
  "scripts": {
49
50
  "prepare": "tsc",
51
+ "test": "npm run prepare && node --test test/transformExcelToFortune.xls_preview.test.js",
50
52
  "storybook": "storybook dev -p 6006",
51
53
  "build-storybook": "storybook build"
52
54
  },
Binary file
@@ -0,0 +1,230 @@
1
+ const test = require("node:test");
2
+ const assert = require("node:assert/strict");
3
+ const fs = require("node:fs/promises");
4
+ const path = require("node:path");
5
+ const React = require("react");
6
+ const ReactDOMClient = require("react-dom/client");
7
+ const { JSDOM } = require("jsdom");
8
+
9
+ const { transformExcelToFortune } = require("../dist/main.js");
10
+
11
+ const fixturePath = path.resolve(__dirname, "fixtures", "xls_preview.xlsx");
12
+
13
+ const toBuffer = (part) => {
14
+ if (Buffer.isBuffer(part)) {
15
+ return part;
16
+ }
17
+
18
+ if (part instanceof ArrayBuffer) {
19
+ return Buffer.from(part);
20
+ }
21
+
22
+ if (ArrayBuffer.isView(part)) {
23
+ return Buffer.from(part.buffer, part.byteOffset, part.byteLength);
24
+ }
25
+
26
+ if (typeof part === "string") {
27
+ return Buffer.from(part);
28
+ }
29
+
30
+ throw new TypeError(`Unsupported file part: ${typeof part}`);
31
+ };
32
+
33
+ global.File = function TestFile(parts, name, options = {}) {
34
+ const buffer = Buffer.concat(parts.map(toBuffer));
35
+ buffer.name = name;
36
+ buffer.type = options.type ?? "";
37
+ buffer.lastModified = options.lastModified ?? Date.now();
38
+ buffer.arrayBuffer = async () =>
39
+ buffer.buffer.slice(
40
+ buffer.byteOffset,
41
+ buffer.byteOffset + buffer.byteLength
42
+ );
43
+ buffer.text = async () => buffer.toString();
44
+ return buffer;
45
+ };
46
+
47
+ global.window = {
48
+ navigator: {
49
+ userAgent: "node-test",
50
+ },
51
+ };
52
+
53
+ const waitForDeferredSizing = () =>
54
+ new Promise((resolve) => {
55
+ setTimeout(resolve, 10);
56
+ });
57
+
58
+ const getCell = (sheet, row, column) =>
59
+ sheet.celldata.find((cell) => cell.r === row && cell.c === column);
60
+
61
+ const loadFixtureIntoFortune = async () => {
62
+ const fileBuffer = await fs.readFile(fixturePath);
63
+ const file = new File(
64
+ [fileBuffer],
65
+ "xls_preview.xlsx",
66
+ {
67
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
68
+ }
69
+ );
70
+
71
+ const setSheetsCalls = [];
72
+ const setKeyCalls = [];
73
+ const columnWidthCalls = [];
74
+ const rowHeightCalls = [];
75
+
76
+ const setSheets = (sheets) => {
77
+ setSheetsCalls.push(sheets);
78
+ };
79
+
80
+ const setKey = (updater) => {
81
+ setKeyCalls.push(updater);
82
+ };
83
+
84
+ const sheetRef = {
85
+ current: {
86
+ setColumnWidth: (config, meta) => {
87
+ columnWidthCalls.push([config, meta]);
88
+ },
89
+ setRowHeight: (config, meta) => {
90
+ rowHeightCalls.push([config, meta]);
91
+ },
92
+ },
93
+ };
94
+
95
+ await transformExcelToFortune(file, setSheets, setKey, sheetRef);
96
+ await waitForDeferredSizing();
97
+
98
+ return {
99
+ setSheetsCalls,
100
+ setKeyCalls,
101
+ columnWidthCalls,
102
+ rowHeightCalls,
103
+ };
104
+ };
105
+
106
+ test("transformExcelToFortune converts xls_preview.xlsx into Fortune sheets", async () => {
107
+ const {
108
+ setSheetsCalls,
109
+ setKeyCalls,
110
+ columnWidthCalls,
111
+ rowHeightCalls,
112
+ } = await loadFixtureIntoFortune();
113
+
114
+ assert.equal(setSheetsCalls.length, 1);
115
+ assert.equal(setKeyCalls.length, 1);
116
+ assert.equal(typeof setKeyCalls[0], "function");
117
+ assert.equal(setKeyCalls[0](0), 1);
118
+
119
+ const [sheets] = setSheetsCalls;
120
+ assert.equal(sheets.length, 1);
121
+
122
+ const [sheet] = sheets;
123
+ assert.equal(sheet.name, "Feuille1");
124
+ assert.equal(sheet.status, "1");
125
+ assert.equal(sheet.order, "0");
126
+ assert.equal(sheet.showGridLines, "1");
127
+ assert.deepEqual(sheet.luckysheet_select_save, [
128
+ {
129
+ row: [10, 10],
130
+ column: [5, 5],
131
+ sheetIndex: "1",
132
+ },
133
+ ]);
134
+
135
+ const b2 = getCell(sheet, 1, 1);
136
+ assert.ok(b2);
137
+ assert.equal(b2.v.v, "552150");
138
+
139
+ const c2 = getCell(sheet, 1, 2);
140
+ assert.ok(c2);
141
+ assert.equal(c2.v.f, "=$B$4");
142
+ assert.equal(c2.v.v, "552150");
143
+
144
+ const i3 = getCell(sheet, 2, 8);
145
+ assert.ok(i3);
146
+ assert.equal(i3.v.v, "max");
147
+
148
+ const p7 = getCell(sheet, 6, 15);
149
+ assert.ok(p7);
150
+ assert.equal(p7.v.f, "=N7-O7");
151
+ assert.equal(p7.v.v, "1300");
152
+
153
+ const images = sheet.images || [];
154
+ assert.equal(images.length, 1);
155
+ assert.match(images[0].src, /^data:image\/png;base64,/);
156
+ assert.equal(images[0].id.startsWith("image_"), true);
157
+ assert.equal(images[0].left, 116.13333333333333);
158
+ assert.equal(images[0].top, 312.2);
159
+ assert.equal(images[0].width, 252.73333333333335);
160
+ assert.equal(images[0].height, 273.06666666666666);
161
+ assert.equal(images[0].type, "2");
162
+ assert.equal(images[0].fromCol, 1);
163
+ assert.equal(images[0].fromRow, 11);
164
+ assert.equal(images[0].toCol, 4);
165
+ assert.equal(images[0].toRow, 21);
166
+
167
+ assert.equal(columnWidthCalls.length, 1);
168
+ assert.deepEqual(columnWidthCalls[0], [sheet.config.columnlen || {}, { id: sheet.id }]);
169
+
170
+ assert.equal(rowHeightCalls.length, 1);
171
+ assert.deepEqual(rowHeightCalls[0], [sheet.config.rowlen || {}, { id: sheet.id }]);
172
+ });
173
+
174
+ test("converted xls_preview.xlsx sheets can be mounted in Workbook", async () => {
175
+ const { setSheetsCalls } = await loadFixtureIntoFortune();
176
+ const [sheets] = setSheetsCalls;
177
+ const { Workbook } = await import("@fortune-sheet/react/dist/index.esm.js");
178
+ const dom = new JSDOM(
179
+ "<!doctype html><html><body><div id='root'></div></body></html>",
180
+ { pretendToBeVisual: true, url: "http://localhost/" }
181
+ );
182
+
183
+ const previousGlobals = {
184
+ window: global.window,
185
+ document: global.document,
186
+ navigator: global.navigator,
187
+ HTMLElement: global.HTMLElement,
188
+ MutationObserver: global.MutationObserver,
189
+ getComputedStyle: global.getComputedStyle,
190
+ requestAnimationFrame: global.requestAnimationFrame,
191
+ cancelAnimationFrame: global.cancelAnimationFrame,
192
+ ResizeObserver: global.ResizeObserver,
193
+ DOMParser: global.DOMParser,
194
+ };
195
+
196
+ global.window = dom.window;
197
+ global.document = dom.window.document;
198
+ global.navigator = dom.window.navigator;
199
+ global.HTMLElement = dom.window.HTMLElement;
200
+ global.MutationObserver = dom.window.MutationObserver;
201
+ global.getComputedStyle = dom.window.getComputedStyle;
202
+ global.requestAnimationFrame = dom.window.requestAnimationFrame.bind(dom.window);
203
+ global.cancelAnimationFrame = dom.window.cancelAnimationFrame.bind(dom.window);
204
+ global.ResizeObserver = class {
205
+ observe() {}
206
+ unobserve() {}
207
+ disconnect() {}
208
+ };
209
+ global.DOMParser = dom.window.DOMParser;
210
+
211
+ const root = ReactDOMClient.createRoot(document.getElementById("root"));
212
+
213
+ try {
214
+ root.render(React.createElement(Workbook, { data: sheets }));
215
+ await new Promise((resolve) => setTimeout(resolve, 50));
216
+ } finally {
217
+ root.unmount();
218
+ dom.window.close();
219
+ global.window = previousGlobals.window;
220
+ global.document = previousGlobals.document;
221
+ global.navigator = previousGlobals.navigator;
222
+ global.HTMLElement = previousGlobals.HTMLElement;
223
+ global.MutationObserver = previousGlobals.MutationObserver;
224
+ global.getComputedStyle = previousGlobals.getComputedStyle;
225
+ global.requestAnimationFrame = previousGlobals.requestAnimationFrame;
226
+ global.cancelAnimationFrame = previousGlobals.cancelAnimationFrame;
227
+ global.ResizeObserver = previousGlobals.ResizeObserver;
228
+ global.DOMParser = previousGlobals.DOMParser;
229
+ }
230
+ });