@visactor/vtable-plugins 1.19.5 → 1.19.7

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.
Files changed (85) hide show
  1. package/cjs/index.d.ts +1 -0
  2. package/cjs/index.js +2 -1
  3. package/cjs/index.js.map +1 -1
  4. package/cjs/table-export/csv/index.d.ts +12 -0
  5. package/cjs/table-export/csv/index.js +54 -0
  6. package/cjs/table-export/csv/index.js.map +1 -0
  7. package/cjs/table-export/excel/index.d.ts +21 -0
  8. package/cjs/table-export/excel/index.js +243 -0
  9. package/cjs/table-export/excel/index.js.map +1 -0
  10. package/cjs/table-export/excel/style.d.ts +6 -0
  11. package/cjs/table-export/excel/style.js +89 -0
  12. package/cjs/table-export/excel/style.js.map +1 -0
  13. package/cjs/table-export/index.d.ts +7 -0
  14. package/cjs/table-export/index.js +38 -0
  15. package/cjs/table-export/index.js.map +1 -0
  16. package/cjs/table-export/util/color.d.ts +152 -0
  17. package/cjs/table-export/util/color.js +197 -0
  18. package/cjs/table-export/util/color.js.map +1 -0
  19. package/cjs/table-export/util/download.d.ts +2 -0
  20. package/cjs/table-export/util/download.js +60 -0
  21. package/cjs/table-export/util/download.js.map +1 -0
  22. package/cjs/table-export/util/encode.d.ts +3 -0
  23. package/cjs/table-export/util/encode.js +17 -0
  24. package/cjs/table-export/util/encode.js.map +1 -0
  25. package/cjs/table-export/util/indent.d.ts +2 -0
  26. package/cjs/table-export/util/indent.js +27 -0
  27. package/cjs/table-export/util/indent.js.map +1 -0
  28. package/cjs/table-export/util/pagination.d.ts +5 -0
  29. package/cjs/table-export/util/pagination.js +24 -0
  30. package/cjs/table-export/util/pagination.js.map +1 -0
  31. package/cjs/table-export/util/promise.d.ts +1 -0
  32. package/cjs/table-export/util/promise.js +10 -0
  33. package/cjs/table-export/util/promise.js.map +1 -0
  34. package/cjs/table-export/util/type.d.ts +6 -0
  35. package/cjs/table-export/util/type.js +6 -0
  36. package/cjs/table-export/util/type.js.map +1 -0
  37. package/cjs/table-export.d.ts +17 -0
  38. package/cjs/table-export.js +93 -0
  39. package/cjs/table-export.js.map +1 -0
  40. package/cjs/types.js +1 -2
  41. package/cjs/wps-fill-handle.js +1 -0
  42. package/dist/vtable-plugins.js +1179 -185
  43. package/dist/vtable-plugins.min.js +14 -14
  44. package/es/index.d.ts +1 -0
  45. package/es/index.js +2 -0
  46. package/es/index.js.map +1 -1
  47. package/es/table-export/csv/index.d.ts +12 -0
  48. package/es/table-export/csv/index.js +47 -0
  49. package/es/table-export/csv/index.js.map +1 -0
  50. package/es/table-export/excel/index.d.ts +21 -0
  51. package/es/table-export/excel/index.js +242 -0
  52. package/es/table-export/excel/index.js.map +1 -0
  53. package/es/table-export/excel/style.d.ts +6 -0
  54. package/es/table-export/excel/style.js +80 -0
  55. package/es/table-export/excel/style.js.map +1 -0
  56. package/es/table-export/index.d.ts +7 -0
  57. package/es/table-export/index.js +8 -0
  58. package/es/table-export/index.js.map +1 -0
  59. package/es/table-export/util/color.d.ts +152 -0
  60. package/es/table-export/util/color.js +189 -0
  61. package/es/table-export/util/color.js.map +1 -0
  62. package/es/table-export/util/download.d.ts +2 -0
  63. package/es/table-export/util/download.js +52 -0
  64. package/es/table-export/util/download.js.map +1 -0
  65. package/es/table-export/util/encode.d.ts +3 -0
  66. package/es/table-export/util/encode.js +10 -0
  67. package/es/table-export/util/encode.js.map +1 -0
  68. package/es/table-export/util/indent.d.ts +2 -0
  69. package/es/table-export/util/indent.js +19 -0
  70. package/es/table-export/util/indent.js.map +1 -0
  71. package/es/table-export/util/pagination.d.ts +5 -0
  72. package/es/table-export/util/pagination.js +16 -0
  73. package/es/table-export/util/pagination.js.map +1 -0
  74. package/es/table-export/util/promise.d.ts +1 -0
  75. package/es/table-export/util/promise.js +4 -0
  76. package/es/table-export/util/promise.js.map +1 -0
  77. package/es/table-export/util/type.d.ts +6 -0
  78. package/es/table-export/util/type.js +2 -0
  79. package/es/table-export/util/type.js.map +1 -0
  80. package/es/table-export.d.ts +17 -0
  81. package/es/table-export.js +62 -0
  82. package/es/table-export.js.map +1 -0
  83. package/es/types.js +1 -2
  84. package/es/wps-fill-handle.js +2 -1
  85. package/package.json +10 -8
package/es/index.d.ts CHANGED
@@ -14,3 +14,4 @@ export * from './gantt-export-image';
14
14
  export * from './paste-add-row-column';
15
15
  export * from './wps-fill-handle';
16
16
  export * from './excel-import';
17
+ export * from './table-export';
package/es/index.js CHANGED
@@ -29,4 +29,6 @@ export * from "./paste-add-row-column";
29
29
  export * from "./wps-fill-handle";
30
30
 
31
31
  export * from "./excel-import";
32
+
33
+ export * from "./table-export";
32
34
  //# sourceMappingURL=index.js.map
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qCAAqC,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC","file":"index.js","sourcesContent":["export * from './carousel-animation';\nexport * from './invert-highlight';\nexport * from './header-highlight';\nexport * from './add-row-column';\nexport * from './column-series';\nexport * from './row-series';\nexport * from './highlight-header-when-select-cell';\nexport * from './excel-edit-cell-keyboard';\nexport * from './types';\nexport * from './focus-highlight';\nexport * from './table-carousel-animation';\nexport * from './rotate-table';\nexport * from './gantt-export-image';\nexport * from './paste-add-row-column';\nexport * from './wps-fill-handle';\nexport * from './excel-import';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qCAAqC,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC","file":"index.js","sourcesContent":["export * from './carousel-animation';\nexport * from './invert-highlight';\nexport * from './header-highlight';\nexport * from './add-row-column';\nexport * from './column-series';\nexport * from './row-series';\nexport * from './highlight-header-when-select-cell';\nexport * from './excel-edit-cell-keyboard';\nexport * from './types';\nexport * from './focus-highlight';\nexport * from './table-carousel-animation';\nexport * from './rotate-table';\nexport * from './gantt-export-image';\nexport * from './paste-add-row-column';\nexport * from './wps-fill-handle';\nexport * from './excel-import';\nexport * from './table-export';\n"]}
@@ -0,0 +1,12 @@
1
+ import type * as VTable from '@visactor/vtable';
2
+ import type { CellInfo } from '../excel';
3
+ type IVTable = VTable.ListTable | VTable.PivotTable | VTable.PivotChart;
4
+ export type ExportVTableToCsvOptions = {
5
+ formatExportOutput?: (cellInfo: CellInfo) => string | undefined;
6
+ escape?: boolean;
7
+ exportAllData?: boolean;
8
+ downloadFile?: boolean;
9
+ fileName?: string;
10
+ };
11
+ export declare function exportVTableToCsv(tableInstance: IVTable, option?: ExportVTableToCsvOptions): string;
12
+ export {};
@@ -0,0 +1,47 @@
1
+ import { handlePaginationExport } from "../util/pagination";
2
+
3
+ const newLine = "\r\n", separator = ",";
4
+
5
+ export function exportVTableToCsv(tableInstance, option) {
6
+ const exportAllData = !!(null == option ? void 0 : option.exportAllData), {handleRowCount: handleRowCount, reset: reset} = handlePaginationExport(tableInstance, exportAllData), maxRow = handleRowCount(), maxCol = tableInstance.colCount - 1;
7
+ let copyValue = "";
8
+ for (let row = 0; row <= maxRow; row++) {
9
+ for (let col = 0; col <= maxCol; col++) {
10
+ const copyCellValue = getCopyCellValue(col, row, tableInstance, option);
11
+ if ("undefined" != typeof Promise && copyCellValue instanceof Promise) ; else {
12
+ const strCellValue = `${copyCellValue}`;
13
+ /^\[object .*\]$/.exec(strCellValue) || (copyValue += strCellValue);
14
+ }
15
+ copyValue += ",";
16
+ }
17
+ copyValue += "\r\n";
18
+ }
19
+ return reset(), copyValue;
20
+ }
21
+
22
+ function getCopyCellValue(col, row, tableInstance, option) {
23
+ var _a;
24
+ const rawRecord = tableInstance.getCellRawRecord(col, row), cellValue = null !== (_a = rawRecord && rawRecord.vtableMergeName) && void 0 !== _a ? _a : tableInstance.getCellValue(col, row, !1);
25
+ if (null == option ? void 0 : option.formatExportOutput) {
26
+ const cellInfo = {
27
+ cellType: tableInstance.getCellType(col, row),
28
+ cellValue: cellValue,
29
+ table: tableInstance,
30
+ col: col,
31
+ row: row
32
+ }, formattedValue = option.formatExportOutput(cellInfo);
33
+ if (void 0 !== formattedValue) return "string" == typeof formattedValue ? '"' + formattedValue + '"' : formattedValue;
34
+ }
35
+ const cellRange = tableInstance.getCellRange(col, row), copyStartCol = cellRange.start.col, copyStartRow = cellRange.start.row;
36
+ if (copyStartCol !== col || copyStartRow !== row) return "";
37
+ let value = cellValue;
38
+ return (null == option ? void 0 : option.escape) ? value = escapeForCSV(value) : "string" == typeof value && (value = '"' + value + '"'),
39
+ value;
40
+ }
41
+
42
+ function escapeForCSV(str) {
43
+ if ("string" != typeof str) return str;
44
+ let escapedStr = str.replace(/"/g, '""');
45
+ return /[,"\r\n]/.test(escapedStr) && (escapedStr = `"${escapedStr}"`), escapedStr;
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["table-export/csv/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type * as VTable from '@visactor/vtable';\nimport type { CellInfo } from '../excel';\nimport { handlePaginationExport } from '../util/pagination';\n\ntype IVTable = VTable.ListTable | VTable.PivotTable | VTable.PivotChart;\ntype CellRange = VTable.TYPES.CellRange;\n\nconst newLine = '\\r\\n';\nconst separator = ',';\n\nexport type ExportVTableToCsvOptions = {\n formatExportOutput?: (cellInfo: CellInfo) => string | undefined;\n escape?: boolean;\n exportAllData?: boolean;\n downloadFile?: boolean;\n fileName?: string;\n};\n\nexport function exportVTableToCsv(tableInstance: IVTable, option?: ExportVTableToCsvOptions): string {\n const exportAllData = !!option?.exportAllData;\n const { handleRowCount, reset } = handlePaginationExport(tableInstance, exportAllData);\n const minRow = 0;\n const maxRow = handleRowCount();\n const minCol = 0;\n const maxCol = tableInstance.colCount - 1;\n\n let copyValue = '';\n for (let row = minRow; row <= maxRow; row++) {\n for (let col = minCol; col <= maxCol; col++) {\n const copyCellValue = getCopyCellValue(col, row, tableInstance, option);\n if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) {\n // not support async\n } else {\n const strCellValue = `${copyCellValue}`;\n if (/^\\[object .*\\]$/.exec(strCellValue)) {\n // ignore object\n } else {\n copyValue += strCellValue;\n }\n }\n copyValue += separator;\n }\n copyValue += newLine;\n }\n // 恢复透视表的pagination配置\n reset();\n return copyValue;\n}\n\nfunction getCopyCellValue(\n col: number,\n row: number,\n tableInstance: IVTable,\n option?: ExportVTableToCsvOptions\n): string | Promise<string> | void {\n const rawRecord = tableInstance.getCellRawRecord(col, row);\n const cellValue = (rawRecord && rawRecord.vtableMergeName) ?? tableInstance.getCellValue(col, row, false);\n\n if (option?.formatExportOutput) {\n const cellType = tableInstance.getCellType(col, row);\n const cellInfo = { cellType, cellValue, table: tableInstance, col, row };\n const formattedValue = option.formatExportOutput(cellInfo);\n if (formattedValue !== undefined) {\n if (typeof formattedValue === 'string') {\n return '\"' + formattedValue + '\"';\n }\n return formattedValue;\n }\n }\n const cellRange: CellRange = tableInstance.getCellRange(col, row);\n const copyStartCol = cellRange.start.col;\n const copyStartRow = cellRange.start.row;\n\n if (copyStartCol !== col || copyStartRow !== row) {\n return '';\n }\n\n let value = cellValue;\n if (option?.escape) {\n value = escapeForCSV(value);\n } else if (typeof value === 'string') {\n value = '\"' + value + '\"';\n }\n return value;\n}\n\n/**\n * 将字符串中的特殊符号进行转义,以避免干扰CSV解析\n * @param {string} str - 需要处理的字符串\n * @return {string} - 已处理的字符串\n */\nfunction escapeForCSV(str: any) {\n if (typeof str !== 'string') {\n return str;\n }\n\n // 替换双引号为两个双引号\n let escapedStr = str.replace(/\"/g, '\"\"');\n\n // 如果字符串中包含逗号、换行符或双引号,则需要用双引号包裹\n if (/[,\"\\r\\n]/.test(escapedStr)) {\n escapedStr = `\"${escapedStr}\"`;\n }\n\n return escapedStr;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import ExcelJS from 'exceljs';
2
+ import type { IVTable } from '../util/type';
3
+ export type CellInfo = {
4
+ cellType: string;
5
+ cellValue: string;
6
+ table: IVTable;
7
+ col: number;
8
+ row: number;
9
+ };
10
+ export type SkipImageExportCellType = 'image' | 'video' | 'progressbar' | 'sparkline' | 'chart' | 'custom' | 'textWithIcon';
11
+ export type ExportVTableToExcelOptions = {
12
+ ignoreIcon?: boolean;
13
+ exportAllData?: boolean;
14
+ formatExportOutput?: (cellInfo: CellInfo) => string | undefined;
15
+ formatExcelJSCell?: (cellInfo: CellInfo, cellInExcelJS: ExcelJS.Cell) => ExcelJS.Cell;
16
+ excelJSWorksheetCallback?: (worksheet: ExcelJS.Worksheet) => void;
17
+ skipImageExportCellType?: SkipImageExportCellType[];
18
+ downloadFile?: boolean;
19
+ fileName?: string;
20
+ };
21
+ export declare function exportVTableToExcel(tableInstance: IVTable, options?: ExportVTableToExcelOptions, optimization?: boolean): Promise<ExcelJS.Buffer>;
@@ -0,0 +1,242 @@
1
+ var __awaiter = this && this.__awaiter || function(thisArg, _arguments, P, generator) {
2
+ return new (P || (P = Promise))((function(resolve, reject) {
3
+ function fulfilled(value) {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ }
10
+ function rejected(value) {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ }
17
+ function step(result) {
18
+ var value;
19
+ result.done ? resolve(result.value) : (value = result.value, value instanceof P ? value : new P((function(resolve) {
20
+ resolve(value);
21
+ }))).then(fulfilled, rejected);
22
+ }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ }));
25
+ };
26
+
27
+ import ExcelJS from "exceljs";
28
+
29
+ import { encodeCellAddress } from "../util/encode";
30
+
31
+ import { getCellAlignment, getCellBorder, getCellFill, getCellFont } from "./style";
32
+
33
+ import { updateCell, renderChart, graphicUtil } from "@visactor/vtable";
34
+
35
+ import { isArray, isFunction } from "@visactor/vutils";
36
+
37
+ import { getHierarchyOffset } from "../util/indent";
38
+
39
+ import { isPromise } from "../util/promise";
40
+
41
+ import { handlePaginationExport } from "../util/pagination";
42
+
43
+ function requestIdleCallbackPromise(options) {
44
+ return new Promise((resolve => {
45
+ requestIdleCallback((deadline => {
46
+ resolve(deadline);
47
+ }), options);
48
+ }));
49
+ }
50
+
51
+ export function exportVTableToExcel(tableInstance, options, optimization = !1) {
52
+ return __awaiter(this, void 0, void 0, (function*() {
53
+ const workbook = new ExcelJS.Workbook, worksheet = workbook.addWorksheet("sheet1"), exportAllData = !!(null == options ? void 0 : options.exportAllData), {handleRowCount: handleRowCount, reset: reset} = handlePaginationExport(tableInstance, exportAllData), maxRow = handleRowCount(), maxCol = tableInstance.colCount - 1;
54
+ worksheet.properties.defaultRowHeight = 40;
55
+ const columns = [], mergeCells = [], mergeCellSet = new Set;
56
+ let currentRow = 0;
57
+ function processSlice(deadline) {
58
+ return new Promise((resolve => __awaiter(this, void 0, void 0, (function*() {
59
+ for (;currentRow <= maxRow && (!optimization || (null == deadline ? void 0 : deadline.timeRemaining()) > 0); ) {
60
+ const endRow = Math.min(currentRow + 100 - 1, maxRow);
61
+ for (let col = 0; col <= maxCol; col++) {
62
+ const colWidth = tableInstance.getColWidth(col);
63
+ void 0 === columns[col] && (columns[col] = {
64
+ width: colWidth / 6
65
+ });
66
+ for (let row = currentRow; row <= endRow; row++) {
67
+ if (0 === col) {
68
+ const rowHeight = tableInstance.getRowHeight(row);
69
+ worksheet.getRow(row + 1).height = rowHeight;
70
+ }
71
+ yield addCell(col, row, tableInstance, worksheet, workbook, options);
72
+ const cellRange = tableInstance.getCellRange(col, row);
73
+ if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {
74
+ const key = `${cellRange.start.col},${cellRange.start.row}:${cellRange.end.col},${cellRange.end.row}`;
75
+ mergeCellSet.has(key) || (mergeCellSet.add(key), mergeCells.push(cellRange));
76
+ }
77
+ }
78
+ }
79
+ currentRow = endRow + 1;
80
+ }
81
+ if (currentRow > maxRow) resolve(); else {
82
+ let nextDeadline;
83
+ optimization && (nextDeadline = yield requestIdleCallbackPromise()), yield processSlice(nextDeadline),
84
+ resolve();
85
+ }
86
+ }))));
87
+ }
88
+ yield new Promise((resolve => __awaiter(this, void 0, void 0, (function*() {
89
+ let deadline;
90
+ optimization && (deadline = yield requestIdleCallbackPromise()), yield processSlice(deadline),
91
+ resolve();
92
+ })))), worksheet.columns = columns, mergeCells.forEach((mergeCell => {
93
+ worksheet.mergeCells(mergeCell.start.row + 1, mergeCell.start.col + 1, mergeCell.end.row + 1, mergeCell.end.col + 1);
94
+ }));
95
+ const frozenView = [];
96
+ tableInstance.frozenRowCount > 0 && frozenView.push({
97
+ state: "frozen",
98
+ ySplit: tableInstance.frozenRowCount,
99
+ topLeftCell: encodeCellAddress(0, tableInstance.frozenRowCount)
100
+ }), tableInstance.frozenColCount > 0 && frozenView.push({
101
+ state: "frozen",
102
+ xSplit: tableInstance.frozenColCount,
103
+ topLeftCell: encodeCellAddress(tableInstance.frozenColCount, 0)
104
+ }), worksheet.views = frozenView, (null == options ? void 0 : options.excelJSWorksheetCallback) && options.excelJSWorksheetCallback(worksheet);
105
+ const buffer = yield workbook.xlsx.writeBuffer();
106
+ return reset(), buffer;
107
+ }));
108
+ }
109
+
110
+ function addCell(col, row, tableInstance, worksheet, workbook, options) {
111
+ var _a;
112
+ return __awaiter(this, void 0, void 0, (function*() {
113
+ const {layoutMap: layoutMap} = tableInstance.internalProps, cellType = tableInstance.getCellType(col, row), rawRecord = tableInstance.getCellRawRecord(col, row);
114
+ let cellValue = null !== (_a = rawRecord && rawRecord.vtableMergeName) && void 0 !== _a ? _a : tableInstance.getCellValue(col, row, !1);
115
+ isPromise(cellValue) && (cellValue = yield cellValue);
116
+ const cellStyle = tableInstance.getCellStyle(col, row), cellLocation = tableInstance.getCellLocation(col, row), define = "body" !== cellLocation ? tableInstance.getHeaderDefine(col, row) : tableInstance.getBodyColumnDefine(col, row);
117
+ let icons, customRender, customLayout, cell;
118
+ if (("body" !== cellLocation || ((null == define ? void 0 : define.dragOrder) || !!(null == define ? void 0 : define.icon) || !!(null == define ? void 0 : define.tree))) && (icons = tableInstance.getCellIcons(col, row)),
119
+ "body" !== cellLocation ? (customRender = null == define ? void 0 : define.headerCustomRender,
120
+ customLayout = null == define ? void 0 : define.headerCustomLayout) : (customRender = (null == define ? void 0 : define.customRender) || tableInstance.customRender,
121
+ customLayout = null == define ? void 0 : define.customLayout), null == options ? void 0 : options.formatExportOutput) {
122
+ const cellInfo = {
123
+ cellType: cellType,
124
+ cellValue: cellValue,
125
+ table: tableInstance,
126
+ col: col,
127
+ row: row
128
+ }, formattedValue = options.formatExportOutput(cellInfo);
129
+ if (void 0 !== formattedValue) {
130
+ let cell = worksheet.getCell(encodeCellAddress(col, row));
131
+ cell.value = formattedValue, cell.font = getCellFont(cellStyle, cellType), cell.fill = getCellFill(cellStyle),
132
+ cell.border = getCellBorder(cellStyle);
133
+ const offset = getHierarchyOffset(col, row, tableInstance);
134
+ if (cell.alignment = getCellAlignment(cellStyle, Math.ceil(offset / cell.font.size)),
135
+ cell && (null == options ? void 0 : options.formatExcelJSCell)) {
136
+ const formatedCell = options.formatExcelJSCell({
137
+ cellType: cellType,
138
+ cellValue: cellValue,
139
+ table: tableInstance,
140
+ col: col,
141
+ row: row
142
+ }, cell);
143
+ formatedCell && (cell = formatedCell);
144
+ }
145
+ return cell;
146
+ }
147
+ }
148
+ if ("image" === cellType || "video" === cellType || "progressbar" === cellType || "sparkline" === cellType || layoutMap.isAxisCell(col, row) || !(null == options ? void 0 : options.ignoreIcon) && isArray(icons) && icons.length || customRender || customLayout) if (needCellImageExport(cellType, layoutMap.isAxisCell(col, row), !!customRender || !!customLayout, !((null == options ? void 0 : options.ignoreIcon) || !isArray(icons) || !icons.length), options)) {
149
+ const cellImageBase64 = exportCellImg(col, row, tableInstance), imageId = workbook.addImage({
150
+ base64: cellImageBase64,
151
+ extension: "png"
152
+ });
153
+ worksheet.addImage(imageId, {
154
+ tl: {
155
+ col: col + 1 / 80,
156
+ row: row + 1 / 120
157
+ },
158
+ br: {
159
+ col: col + 1,
160
+ row: row + 1
161
+ },
162
+ editAs: "oneCell"
163
+ });
164
+ } else cell = worksheet.getCell(encodeCellAddress(col, row)); else if ("text" === cellType || "link" === cellType) {
165
+ let linkUrl;
166
+ if (cell = worksheet.getCell(encodeCellAddress(col, row)), "link" === cellType) {
167
+ const templateLink = define.templateLink;
168
+ if (templateLink) {
169
+ const rowData = tableInstance.getCellOriginRecord(col, row);
170
+ if (rowData && rowData.vtableMerge) ; else {
171
+ const cellOriginValue = tableInstance.getCellOriginValue(col, row), data = Object.assign({
172
+ __value: cellValue,
173
+ __dataValue: cellOriginValue
174
+ }, rowData);
175
+ if (isFunction(templateLink)) linkUrl = templateLink(data, col, row, tableInstance); else {
176
+ const re = /\{\s*(\S+?)\s*\}/g;
177
+ linkUrl = templateLink.replace(re, ((matchs, key) => data[key]));
178
+ }
179
+ }
180
+ }
181
+ }
182
+ cell.value = getCellValue(cellValue, cellType, linkUrl), cell.font = getCellFont(cellStyle, cellType),
183
+ cell.fill = getCellFill(cellStyle), cell.border = getCellBorder(cellStyle);
184
+ const offset = getHierarchyOffset(col, row, tableInstance);
185
+ cell.alignment = getCellAlignment(cellStyle, Math.ceil(offset / cell.font.size));
186
+ } else if ("chart" === cellType) if (needCellImageExport("chart", !1, !1, !1, options)) {
187
+ const cellGroup = tableInstance.scenegraph.getCell(col, row);
188
+ renderChart(cellGroup.firstChild);
189
+ const cellImageBase64 = exportCellImg(col, row, tableInstance), imageId = workbook.addImage({
190
+ base64: cellImageBase64,
191
+ extension: "png"
192
+ });
193
+ worksheet.addImage(imageId, {
194
+ tl: {
195
+ col: col + 1 / 80,
196
+ row: row + 1 / 120
197
+ },
198
+ br: {
199
+ col: col + 1,
200
+ row: row + 1
201
+ },
202
+ editAs: "oneCell"
203
+ }), tableInstance.scenegraph.updateNextFrame();
204
+ } else cell = worksheet.getCell(encodeCellAddress(col, row));
205
+ if (cell && (null == options ? void 0 : options.formatExcelJSCell)) {
206
+ const formatedCell = options.formatExcelJSCell({
207
+ cellType: cellType,
208
+ cellValue: cellValue,
209
+ table: tableInstance,
210
+ col: col,
211
+ row: row
212
+ }, cell);
213
+ formatedCell && (cell = formatedCell);
214
+ }
215
+ return cell;
216
+ }));
217
+ }
218
+
219
+ function getCellValue(cellValue, cellType, linkUrl) {
220
+ return "link" === cellType ? {
221
+ text: cellValue,
222
+ hyperlink: linkUrl || cellValue,
223
+ tooltip: cellValue
224
+ } : cellValue;
225
+ }
226
+
227
+ function exportCellImg(col, row, tableInstance) {
228
+ var _a;
229
+ let cellGroup = tableInstance.scenegraph.getCell(col, row), needRemove = !1;
230
+ "empty" === cellGroup.role && (cellGroup = updateCell(col, row, tableInstance, !0),
231
+ cellGroup.setStage(tableInstance.scenegraph.stage), needRemove = !0, cellGroup.stage.dirtyBounds.set(-1 / 0, -1 / 0, 1 / 0, 1 / 0));
232
+ const oldStroke = cellGroup.attribute.stroke;
233
+ cellGroup.attribute.stroke = !1;
234
+ const canvas = graphicUtil.drawGraphicToCanvas(cellGroup, tableInstance.scenegraph.stage);
235
+ return cellGroup.attribute.stroke = oldStroke, needRemove && (null === (_a = cellGroup.parent) || void 0 === _a || _a.removeChild(cellGroup)),
236
+ canvas.toDataURL();
237
+ }
238
+
239
+ function needCellImageExport(cellType, isAxisCell, isCustomCell, isTextWithIcon, options) {
240
+ return !(null == options ? void 0 : options.skipImageExportCellType) || ("image" === cellType || "video" === cellType || "progressbar" === cellType || "sparkline" === cellType || "chart" === cellType ? !options.skipImageExportCellType.includes(cellType) : isAxisCell ? !options.skipImageExportCellType.includes("chart") : isCustomCell ? !options.skipImageExportCellType.includes("custom") : !isTextWithIcon || !options.skipImageExportCellType.includes("textWithIcon"));
241
+ }
242
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["table-export/excel/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import ExcelJS from 'exceljs';\nimport { encodeCellAddress } from '../util/encode';\nimport type { CellType, IVTable } from '../util/type';\nimport { getCellAlignment, getCellBorder, getCellFill, getCellFont } from './style';\nimport { updateCell, renderChart, graphicUtil } from '@visactor/vtable';\nimport { isArray, isFunction } from '@visactor/vutils';\nimport type {\n BaseTableAPI,\n CellRange,\n ColumnDefine,\n IRowSeriesNumber,\n LinkColumnDefine\n} from '@visactor/vtable/es/ts-types';\nimport { getHierarchyOffset } from '../util/indent';\nimport { isPromise } from '../util/promise';\nimport { handlePaginationExport } from '../util/pagination';\n\nexport type CellInfo = {\n cellType: string;\n cellValue: string;\n table: IVTable;\n col: number;\n row: number;\n};\n\nexport type SkipImageExportCellType =\n | 'image'\n | 'video'\n | 'progressbar'\n | 'sparkline'\n | 'chart'\n | 'custom'\n | 'textWithIcon';\n\nexport type ExportVTableToExcelOptions = {\n ignoreIcon?: boolean;\n exportAllData?: boolean;\n formatExportOutput?: (cellInfo: CellInfo) => string | undefined;\n formatExcelJSCell?: (cellInfo: CellInfo, cellInExcelJS: ExcelJS.Cell) => ExcelJS.Cell;\n excelJSWorksheetCallback?: (worksheet: ExcelJS.Worksheet) => void;\n skipImageExportCellType?: SkipImageExportCellType[];\n downloadFile?: boolean;\n fileName?: string;\n};\n\nfunction requestIdleCallbackPromise(options?: IdleRequestOptions) {\n return new Promise<IdleDeadline>(resolve => {\n requestIdleCallback(deadline => {\n resolve(deadline);\n }, options);\n });\n}\n\nexport async function exportVTableToExcel(\n tableInstance: IVTable,\n options?: ExportVTableToExcelOptions,\n optimization = false\n) {\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet('sheet1');\n const exportAllData = !!options?.exportAllData;\n const { handleRowCount, reset } = handlePaginationExport(tableInstance, exportAllData);\n const minRow = 0;\n const maxRow = handleRowCount();\n const minCol = 0;\n const maxCol = tableInstance.colCount - 1;\n worksheet.properties.defaultRowHeight = 40;\n const columns: { width: number }[] = [];\n const mergeCells: CellRange[] = [];\n const mergeCellSet = new Set();\n\n const SLICE_SIZE = 100;\n let currentRow = minRow;\n\n function processSlice(deadline?: IdleDeadline) {\n return new Promise<void>(async resolve => {\n while (currentRow <= maxRow && (!optimization || deadline?.timeRemaining() > 0)) {\n const endRow = Math.min(currentRow + SLICE_SIZE - 1, maxRow);\n for (let col = minCol; col <= maxCol; col++) {\n const colWidth = tableInstance.getColWidth(col);\n if (columns[col] === undefined) {\n columns[col] = { width: colWidth / 6 };\n }\n for (let row = currentRow; row <= endRow; row++) {\n if (col === minCol) {\n const rowHeight = tableInstance.getRowHeight(row);\n const worksheetRow = worksheet.getRow(row + 1);\n // worksheetRow.height = rowHeight * 0.75;\n worksheetRow.height = rowHeight;\n }\n\n await addCell(col, row, tableInstance, worksheet, workbook, options);\n\n const cellRange = tableInstance.getCellRange(col, row);\n if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {\n const key = `${cellRange.start.col},${cellRange.start.row}:${cellRange.end.col},${cellRange.end.row}`;\n if (!mergeCellSet.has(key)) {\n mergeCellSet.add(key);\n mergeCells.push(cellRange);\n }\n }\n }\n }\n currentRow = endRow + 1;\n }\n\n if (currentRow > maxRow) {\n resolve();\n } else {\n let nextDeadline: IdleDeadline | undefined;\n if (optimization) {\n nextDeadline = await requestIdleCallbackPromise();\n }\n await processSlice(nextDeadline);\n resolve();\n }\n });\n }\n\n await new Promise<void>(async resolve => {\n let deadline: IdleDeadline | undefined;\n if (optimization) {\n deadline = await requestIdleCallbackPromise();\n }\n await processSlice(deadline);\n resolve();\n });\n\n worksheet.columns = columns;\n mergeCells.forEach(mergeCell => {\n worksheet.mergeCells(\n mergeCell.start.row + 1,\n mergeCell.start.col + 1,\n mergeCell.end.row + 1,\n mergeCell.end.col + 1\n );\n });\n\n // frozen\n const frozenView: ExcelJS.WorksheetViewFrozen[] = [];\n // top frozen\n if (tableInstance.frozenRowCount > 0) {\n frozenView.push({\n state: 'frozen',\n ySplit: tableInstance.frozenRowCount,\n // activeCell: 'A1',\n topLeftCell: encodeCellAddress(0, tableInstance.frozenRowCount)\n });\n }\n // left frozen\n if (tableInstance.frozenColCount > 0) {\n frozenView.push({\n state: 'frozen',\n xSplit: tableInstance.frozenColCount,\n // activeCell: 'A1',\n topLeftCell: encodeCellAddress(tableInstance.frozenColCount, 0)\n });\n }\n // not support bottom&right frozen\n worksheet.views = frozenView;\n\n if (options?.excelJSWorksheetCallback) {\n options.excelJSWorksheetCallback(worksheet);\n }\n\n const buffer = await workbook.xlsx.writeBuffer();\n // 恢复透视表的pagination配置\n reset();\n return buffer;\n}\n\nasync function addCell(\n col: number,\n row: number,\n tableInstance: IVTable,\n worksheet: ExcelJS.Worksheet,\n workbook: ExcelJS.Workbook,\n options?: ExportVTableToExcelOptions\n) {\n const { layoutMap } = tableInstance.internalProps;\n const cellType = tableInstance.getCellType(col, row);\n const rawRecord = tableInstance.getCellRawRecord(col, row);\n let cellValue = (rawRecord && rawRecord.vtableMergeName) ?? tableInstance.getCellValue(col, row, false);\n if (isPromise(cellValue)) {\n cellValue = await cellValue;\n }\n\n const cellStyle = tableInstance.getCellStyle(col, row);\n\n const cellLocation = tableInstance.getCellLocation(col, row);\n const define =\n cellLocation !== 'body' ? tableInstance.getHeaderDefine(col, row) : tableInstance.getBodyColumnDefine(col, row);\n const mayHaveIcon =\n cellLocation !== 'body'\n ? true\n : (define as IRowSeriesNumber)?.dragOrder || !!define?.icon || !!(define as ColumnDefine)?.tree;\n let icons;\n if (mayHaveIcon) {\n icons = tableInstance.getCellIcons(col, row);\n }\n let customRender;\n let customLayout;\n if (cellLocation !== 'body') {\n customRender = (define as ColumnDefine)?.headerCustomRender;\n customLayout = (define as ColumnDefine)?.headerCustomLayout;\n } else {\n customRender = (define as ColumnDefine)?.customRender || tableInstance.customRender;\n customLayout = (define as ColumnDefine)?.customLayout;\n }\n\n if (options?.formatExportOutput) {\n const cellInfo = { cellType, cellValue, table: tableInstance, col, row };\n const formattedValue = options.formatExportOutput(cellInfo);\n if (formattedValue !== undefined) {\n let cell = worksheet.getCell(encodeCellAddress(col, row));\n cell.value = formattedValue;\n cell.font = getCellFont(cellStyle, cellType);\n cell.fill = getCellFill(cellStyle);\n cell.border = getCellBorder(cellStyle);\n const offset = getHierarchyOffset(col, row, tableInstance as any);\n cell.alignment = getCellAlignment(cellStyle, Math.ceil(offset / cell.font.size));\n\n if (cell && options?.formatExcelJSCell) {\n const formatedCell = options.formatExcelJSCell({ cellType, cellValue, table: tableInstance, col, row }, cell);\n if (formatedCell) {\n cell = formatedCell;\n }\n }\n return cell;\n }\n }\n\n let cell;\n if (\n cellType === 'image' ||\n cellType === 'video' ||\n cellType === 'progressbar' ||\n cellType === 'sparkline' ||\n layoutMap.isAxisCell(col, row) ||\n (!options?.ignoreIcon && isArray(icons) && icons.length) ||\n customRender ||\n customLayout\n ) {\n if (\n !needCellImageExport(\n cellType,\n layoutMap.isAxisCell(col, row),\n !!customRender || !!customLayout,\n !!(!options?.ignoreIcon && isArray(icons) && icons.length),\n options\n )\n ) {\n cell = worksheet.getCell(encodeCellAddress(col, row));\n } else {\n const cellImageBase64 = exportCellImg(col, row, tableInstance);\n const imageId = workbook.addImage({\n base64: cellImageBase64,\n extension: 'png'\n });\n worksheet.addImage(imageId, {\n tl: { col: col + 1 / 80, row: row + 1 / 120 } as any, // ~1px\n br: { col: col + 1, row: row + 1 } as any,\n editAs: 'oneCell'\n // ext: { width: tableInstance.getColWidth(col), height: tableInstance.getRowHeight(row) }\n });\n }\n } else if (cellType === 'text' || cellType === 'link') {\n cell = worksheet.getCell(encodeCellAddress(col, row));\n let linkUrl: string;\n if (cellType === 'link') {\n const templateLink = (define as LinkColumnDefine).templateLink;\n if (templateLink) {\n // 如果有模板链接,使用模板\n const rowData = tableInstance.getCellOriginRecord(col, row);\n if (rowData && rowData.vtableMerge) {\n // group title\n // return;\n } else {\n const cellOriginValue = tableInstance.getCellOriginValue(col, row);\n const data = Object.assign(\n {\n __value: cellValue,\n __dataValue: cellOriginValue\n },\n rowData\n );\n if (isFunction(templateLink)) {\n linkUrl = templateLink(data, col, row, tableInstance as BaseTableAPI);\n } else {\n const re = /\\{\\s*(\\S+?)\\s*\\}/g;\n linkUrl = templateLink.replace(re, (matchs: string, key: string) => {\n matchs;\n return (data as any)[key];\n });\n }\n }\n }\n }\n cell.value = getCellValue(cellValue, cellType, linkUrl);\n cell.font = getCellFont(cellStyle, cellType);\n cell.fill = getCellFill(cellStyle);\n cell.border = getCellBorder(cellStyle);\n const offset = getHierarchyOffset(col, row, tableInstance as any);\n cell.alignment = getCellAlignment(cellStyle, Math.ceil(offset / cell.font.size));\n } else if (cellType === 'chart') {\n if (!needCellImageExport('chart', false, false, false, options)) {\n cell = worksheet.getCell(encodeCellAddress(col, row));\n } else {\n const cellGroup = tableInstance.scenegraph.getCell(col, row);\n renderChart(cellGroup.firstChild as any); // render chart first\n const cellImageBase64 = exportCellImg(col, row, tableInstance);\n const imageId = workbook.addImage({\n base64: cellImageBase64,\n extension: 'png'\n });\n worksheet.addImage(imageId, {\n tl: { col: col + 1 / 80, row: row + 1 / 120 } as any, // ~1px\n br: { col: col + 1, row: row + 1 } as any,\n editAs: 'oneCell'\n // ext: { width: tableInstance.getColWidth(col), height: tableInstance.getRowHeight(row) }\n });\n tableInstance.scenegraph.updateNextFrame(); // rerender chart to avoid display error\n }\n }\n\n if (cell && options?.formatExcelJSCell) {\n const formatedCell = options.formatExcelJSCell({ cellType, cellValue, table: tableInstance, col, row }, cell);\n if (formatedCell) {\n cell = formatedCell;\n }\n }\n return cell;\n}\n\nfunction getCellValue(cellValue: string, cellType: CellType, linkUrl?: string) {\n if (cellType === 'link') {\n return {\n text: cellValue,\n hyperlink: linkUrl || cellValue,\n tooltip: cellValue\n };\n }\n return cellValue;\n}\n\nfunction exportCellImg(col: number, row: number, tableInstance: IVTable) {\n let cellGroup = tableInstance.scenegraph.getCell(col, row);\n let needRemove = false;\n if (cellGroup.role === 'empty') {\n cellGroup = updateCell(col, row, tableInstance as any, true);\n cellGroup.setStage(tableInstance.scenegraph.stage);\n needRemove = true;\n\n // fix dirtyBounds auto update error in drawGraphicToCanvas()\n cellGroup.stage.dirtyBounds.set(-Infinity, -Infinity, Infinity, Infinity);\n }\n const oldStroke = cellGroup.attribute.stroke;\n cellGroup.attribute.stroke = false;\n const canvas = graphicUtil.drawGraphicToCanvas(cellGroup as any, tableInstance.scenegraph.stage) as HTMLCanvasElement;\n cellGroup.attribute.stroke = oldStroke;\n if (needRemove) {\n cellGroup.parent?.removeChild(cellGroup);\n }\n return canvas.toDataURL();\n}\n\nfunction needCellImageExport(\n cellType: CellType,\n isAxisCell: boolean,\n isCustomCell: boolean,\n isTextWithIcon: boolean,\n options?: ExportVTableToExcelOptions\n) {\n if (!options?.skipImageExportCellType) {\n return true;\n }\n\n if (\n cellType === 'image' ||\n cellType === 'video' ||\n cellType === 'progressbar' ||\n cellType === 'sparkline' ||\n cellType === 'chart'\n ) {\n return !options.skipImageExportCellType.includes(cellType);\n } else if (isAxisCell) {\n return !options.skipImageExportCellType.includes('chart');\n } else if (isCustomCell) {\n return !options.skipImageExportCellType.includes('custom');\n } else if (isTextWithIcon) {\n return !options.skipImageExportCellType.includes('textWithIcon');\n }\n return true;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type ExcelJS from 'exceljs';
2
+ import type { CellStyle, CellType } from '../util/type';
3
+ export declare function getCellFont(cellStyle: CellStyle, cellType: CellType): Partial<ExcelJS.Font>;
4
+ export declare function getCellFill(cellStyle: CellStyle): ExcelJS.Fill;
5
+ export declare function getCellBorder(cellStyle: CellStyle): Partial<ExcelJS.Borders>;
6
+ export declare function getCellAlignment(cellStyle: CellStyle, indent: number): Partial<ExcelJS.Alignment>;
@@ -0,0 +1,80 @@
1
+ import { colorStringToRGB, rgbaToHex } from "../util/color";
2
+
3
+ export function getCellFont(cellStyle, cellType) {
4
+ return {
5
+ name: getFirstFontFromFontFamily(cellStyle.fontFamily) || "Arial",
6
+ size: cellStyle.fontSize || 10,
7
+ bold: isFontBold(cellStyle.fontWeight),
8
+ italic: "italic" === cellStyle.fontStyle,
9
+ color: getColor("link" === cellType ? cellStyle._linkColor : cellStyle.color),
10
+ underline: cellStyle.underline
11
+ };
12
+ }
13
+
14
+ function isFontBold(fontWeight) {
15
+ return "number" == typeof fontWeight ? fontWeight >= 600 : Number(fontWeight) >= 600 || "bold" === fontWeight;
16
+ }
17
+
18
+ function getFirstFontFromFontFamily(fontFamily) {
19
+ return fontFamily.split(",").map((font => font.trim()))[0];
20
+ }
21
+
22
+ export function getCellFill(cellStyle) {
23
+ return {
24
+ type: "pattern",
25
+ pattern: "solid",
26
+ fgColor: getColor(cellStyle.bgColor)
27
+ };
28
+ }
29
+
30
+ export function getCellBorder(cellStyle) {
31
+ var _a, _b, _c, _d, _e, _f, _g, _h;
32
+ const {borderColor: borderColor, borderLineWidth: borderLineWidth, borderLineDash: borderLineDash, _strokeArrayWidth: _strokeArrayWidth, _strokeArrayColor: _strokeArrayColor} = cellStyle;
33
+ if (_strokeArrayColor || _strokeArrayWidth) {
34
+ const border = {};
35
+ return _strokeArrayColor && !_strokeArrayColor[0] || _strokeArrayWidth && !_strokeArrayWidth[0] || (border.top = {
36
+ style: getBorderStyle(null !== (_a = null == _strokeArrayWidth ? void 0 : _strokeArrayWidth[0]) && void 0 !== _a ? _a : borderLineWidth, borderLineDash),
37
+ color: getColor(null !== (_b = null == _strokeArrayColor ? void 0 : _strokeArrayColor[0]) && void 0 !== _b ? _b : borderColor)
38
+ }), _strokeArrayColor && !_strokeArrayColor[1] || _strokeArrayWidth && !_strokeArrayWidth[1] || (border.right = {
39
+ style: getBorderStyle(null !== (_c = null == _strokeArrayWidth ? void 0 : _strokeArrayWidth[1]) && void 0 !== _c ? _c : borderLineWidth, borderLineDash),
40
+ color: getColor(null !== (_d = null == _strokeArrayColor ? void 0 : _strokeArrayColor[1]) && void 0 !== _d ? _d : borderColor)
41
+ }), _strokeArrayColor && !_strokeArrayColor[2] || _strokeArrayWidth && !_strokeArrayWidth[2] || (border.bottom = {
42
+ style: getBorderStyle(null !== (_e = null == _strokeArrayWidth ? void 0 : _strokeArrayWidth[2]) && void 0 !== _e ? _e : borderLineWidth, borderLineDash),
43
+ color: getColor(null !== (_f = null == _strokeArrayColor ? void 0 : _strokeArrayColor[2]) && void 0 !== _f ? _f : borderColor)
44
+ }), _strokeArrayColor && !_strokeArrayColor[3] || _strokeArrayWidth && !_strokeArrayWidth[3] || (border.left = {
45
+ style: getBorderStyle(null !== (_g = null == _strokeArrayWidth ? void 0 : _strokeArrayWidth[3]) && void 0 !== _g ? _g : borderLineWidth, borderLineDash),
46
+ color: getColor(null !== (_h = null == _strokeArrayColor ? void 0 : _strokeArrayColor[3]) && void 0 !== _h ? _h : borderColor)
47
+ }), border;
48
+ }
49
+ if (0 === borderLineWidth) return {};
50
+ const border = {
51
+ style: getBorderStyle(borderLineWidth, borderLineDash),
52
+ color: getColor(borderColor)
53
+ };
54
+ return {
55
+ top: border,
56
+ left: border,
57
+ bottom: border,
58
+ right: border
59
+ };
60
+ }
61
+
62
+ function getBorderStyle(lineWidth, borderLineDash) {
63
+ return borderLineDash && borderLineDash.length ? lineWidth <= 2 ? "dashed" : "mediumDashed" : lineWidth <= .5 ? "hair" : lineWidth <= 1 ? "thin" : lineWidth <= 2 ? "medium" : "thick";
64
+ }
65
+
66
+ export function getCellAlignment(cellStyle, indent) {
67
+ return {
68
+ horizontal: cellStyle.textAlign || "left",
69
+ vertical: cellStyle.textBaseline || "middle",
70
+ wrapText: cellStyle.autoWrapText || !1,
71
+ indent: indent || 0
72
+ };
73
+ }
74
+
75
+ function getColor(color) {
76
+ return {
77
+ argb: rgbaToHex(colorStringToRGB(color))
78
+ };
79
+ }
80
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["table-export/excel/style.ts"],"names":[],"mappings":"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","file":"style.js","sourcesContent":["import type ExcelJS from 'exceljs';\nimport { colorStringToRGB, rgbaToHex } from '../util/color';\nimport type { CellStyle, CellType, LineDashsDef } from '../util/type';\n\nexport function getCellFont(cellStyle: CellStyle, cellType: CellType): Partial<ExcelJS.Font> {\n return {\n name: getFirstFontFromFontFamily(cellStyle.fontFamily as string) || 'Arial', // only one font family name\n size: cellStyle.fontSize || 10,\n // bold: cellStyle.fontWeight === 'bold', // only bold or not\n bold: isFontBold(cellStyle.fontWeight), // only bold or not\n italic: cellStyle.fontStyle === 'italic', // only italic or not\n color: getColor(cellType === 'link' ? (cellStyle._linkColor as string) : (cellStyle.color as string)),\n underline: cellStyle.underline\n };\n}\n\nfunction isFontBold(fontWeight: string | number) {\n if (typeof fontWeight === 'number') {\n return fontWeight >= 600;\n }\n if (Number(fontWeight) >= 600) {\n return true;\n }\n return fontWeight === 'bold';\n}\n\nfunction getFirstFontFromFontFamily(fontFamily: string) {\n const fonts = fontFamily.split(',').map(font => font.trim());\n return fonts[0];\n}\n\nexport function getCellFill(cellStyle: CellStyle): ExcelJS.Fill {\n return {\n type: 'pattern',\n pattern: 'solid',\n fgColor: getColor(cellStyle.bgColor as string)\n };\n}\n\nexport function getCellBorder(cellStyle: CellStyle): Partial<ExcelJS.Borders> {\n const { borderColor, borderLineWidth, borderLineDash, _strokeArrayWidth, _strokeArrayColor } = cellStyle;\n if (_strokeArrayColor || _strokeArrayWidth) {\n const border: Partial<ExcelJS.Borders> = {};\n if (!((_strokeArrayColor && !_strokeArrayColor[0]) || (_strokeArrayWidth && !_strokeArrayWidth[0]))) {\n border.top = {\n style: getBorderStyle((_strokeArrayWidth?.[0] as number) ?? (borderLineWidth as number), borderLineDash),\n color: getColor((_strokeArrayColor?.[0] as string) ?? (borderColor as string))\n };\n }\n if (!((_strokeArrayColor && !_strokeArrayColor[1]) || (_strokeArrayWidth && !_strokeArrayWidth[1]))) {\n border.right = {\n style: getBorderStyle((_strokeArrayWidth?.[1] as number) ?? (borderLineWidth as number), borderLineDash),\n color: getColor((_strokeArrayColor?.[1] as string) ?? (borderColor as string))\n };\n }\n if (!((_strokeArrayColor && !_strokeArrayColor[2]) || (_strokeArrayWidth && !_strokeArrayWidth[2]))) {\n border.bottom = {\n style: getBorderStyle((_strokeArrayWidth?.[2] as number) ?? (borderLineWidth as number), borderLineDash),\n color: getColor((_strokeArrayColor?.[2] as string) ?? (borderColor as string))\n };\n }\n if (!((_strokeArrayColor && !_strokeArrayColor[3]) || (_strokeArrayWidth && !_strokeArrayWidth[3]))) {\n border.left = {\n style: getBorderStyle((_strokeArrayWidth?.[3] as number) ?? (borderLineWidth as number), borderLineDash),\n color: getColor((_strokeArrayColor?.[3] as string) ?? (borderColor as string))\n };\n }\n return border;\n }\n\n if (borderLineWidth === 0) {\n return {};\n }\n const border = {\n style: getBorderStyle(borderLineWidth as number, borderLineDash),\n color: getColor(borderColor as string)\n };\n return {\n top: border,\n left: border,\n bottom: border,\n right: border\n };\n}\n\nfunction getBorderStyle(lineWidth: number, borderLineDash: LineDashsDef): ExcelJS.BorderStyle {\n // hair:0.5\n // thin:1\n // medium:2.0\n // thick:3.0\n if (borderLineDash && borderLineDash.length) {\n if (lineWidth <= 2) {\n return 'dashed';\n }\n return 'mediumDashed';\n }\n if (lineWidth <= 0.5) {\n return 'hair';\n } else if (lineWidth <= 1) {\n return 'thin';\n } else if (lineWidth <= 2) {\n return 'medium';\n }\n return 'thick';\n}\n\nexport function getCellAlignment(cellStyle: CellStyle, indent: number): Partial<ExcelJS.Alignment> {\n return {\n horizontal: cellStyle.textAlign || 'left',\n vertical: cellStyle.textBaseline || 'middle',\n wrapText: cellStyle.autoWrapText || false,\n indent: indent || 0\n } as any;\n}\n\nfunction getColor(color: string) {\n // to do: support gradient color\n return {\n argb: rgbaToHex(colorStringToRGB(color))\n };\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { ExportVTableToExcelOptions } from './excel';
2
+ import { exportVTableToExcel } from './excel';
3
+ import type { ExportVTableToCsvOptions } from './csv';
4
+ import { exportVTableToCsv } from './csv';
5
+ import { downloadCsv, downloadExcel } from './util/download';
6
+ export { exportVTableToCsv, downloadCsv, exportVTableToExcel, downloadExcel };
7
+ export type { ExportVTableToCsvOptions, ExportVTableToExcelOptions };
@@ -0,0 +1,8 @@
1
+ import { exportVTableToExcel } from "./excel";
2
+
3
+ import { exportVTableToCsv } from "./csv";
4
+
5
+ import { downloadCsv, downloadExcel } from "./util/download";
6
+
7
+ export { exportVTableToCsv, downloadCsv, exportVTableToExcel, downloadExcel };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["table-export/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC","file":"index.js","sourcesContent":["import type { ExportVTableToExcelOptions } from './excel';\nimport { exportVTableToExcel } from './excel';\nimport type { ExportVTableToCsvOptions } from './csv';\nimport { exportVTableToCsv } from './csv';\nimport { downloadCsv, downloadExcel } from './util/download';\n\nexport { exportVTableToCsv, downloadCsv, exportVTableToExcel, downloadExcel };\nexport type { ExportVTableToCsvOptions, ExportVTableToExcelOptions };\n"]}