@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 +4 -0
- package/.github/workflows/publish.yml +1 -1
- package/.github/workflows/test.yml +27 -0
- package/README.md +1 -1
- package/dist/ToExcel/ExcelConfig.js +1 -2
- package/dist/ToExcel/ExcelFile.js +23 -14
- package/dist/ToExcel/ExcelValidation.js +1 -2
- package/dist/ToFortuneSheet/FortuneFile.js +16 -1
- package/dist/ToFortuneSheet/HandleZip.js +8 -8
- package/dist/ToFortuneSheet/IFortune.d.ts +1 -1
- package/dist/ToFortuneSheet/ImportHelper.js +2 -2
- package/dist/ToFortuneSheet/ReadXml.js +3 -3
- package/dist/common/ToolbarItem.js +2 -2
- package/dist/common/Transform.js +36 -13
- package/dist/common/method.d.ts +1 -1
- package/dist/common/method.js +26 -26
- package/package.json +4 -2
- package/test/fixtures/xls_preview.xlsx +0 -0
- package/test/transformExcelToFortune.xls_preview.test.js +230 -0
package/.gitattributes
ADDED
|
@@ -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
|
|
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 =
|
|
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 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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 =
|
|
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 =
|
|
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(
|
|
76
|
-
|
|
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 =
|
|
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 =
|
|
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,
|
|
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,
|
|
58
|
+
_i = 0, _a = Object.entries(zip.files);
|
|
59
59
|
_d.label = 2;
|
|
60
60
|
case 2:
|
|
61
|
-
if (!(_i <
|
|
62
|
-
|
|
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 = (
|
|
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
|
{
|
|
@@ -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 =
|
|
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.
|
|
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 =
|
|
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.");
|
package/dist/common/Transform.js
CHANGED
|
@@ -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 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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 =
|
|
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 (
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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)];
|
package/dist/common/method.d.ts
CHANGED
|
@@ -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:
|
|
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
|
package/dist/common/method.js
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.rgb2hex = exports.getObjType = exports.setMerge = exports.
|
|
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 =
|
|
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 =
|
|
59
|
+
sheetIndex = sheetId;
|
|
40
60
|
}
|
|
41
61
|
else {
|
|
42
|
-
sheetIndex =
|
|
62
|
+
sheetIndex = si;
|
|
43
63
|
}
|
|
44
64
|
}
|
|
45
65
|
else {
|
|
46
|
-
sheetIndex =
|
|
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(/þ/g, "þ")
|
|
468
480
|
.replace(/ÿ/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.
|
|
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.
|
|
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
|
+
});
|