@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.
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +2 -1
- package/cjs/index.js.map +1 -1
- package/cjs/table-export/csv/index.d.ts +12 -0
- package/cjs/table-export/csv/index.js +54 -0
- package/cjs/table-export/csv/index.js.map +1 -0
- package/cjs/table-export/excel/index.d.ts +21 -0
- package/cjs/table-export/excel/index.js +243 -0
- package/cjs/table-export/excel/index.js.map +1 -0
- package/cjs/table-export/excel/style.d.ts +6 -0
- package/cjs/table-export/excel/style.js +89 -0
- package/cjs/table-export/excel/style.js.map +1 -0
- package/cjs/table-export/index.d.ts +7 -0
- package/cjs/table-export/index.js +38 -0
- package/cjs/table-export/index.js.map +1 -0
- package/cjs/table-export/util/color.d.ts +152 -0
- package/cjs/table-export/util/color.js +197 -0
- package/cjs/table-export/util/color.js.map +1 -0
- package/cjs/table-export/util/download.d.ts +2 -0
- package/cjs/table-export/util/download.js +60 -0
- package/cjs/table-export/util/download.js.map +1 -0
- package/cjs/table-export/util/encode.d.ts +3 -0
- package/cjs/table-export/util/encode.js +17 -0
- package/cjs/table-export/util/encode.js.map +1 -0
- package/cjs/table-export/util/indent.d.ts +2 -0
- package/cjs/table-export/util/indent.js +27 -0
- package/cjs/table-export/util/indent.js.map +1 -0
- package/cjs/table-export/util/pagination.d.ts +5 -0
- package/cjs/table-export/util/pagination.js +24 -0
- package/cjs/table-export/util/pagination.js.map +1 -0
- package/cjs/table-export/util/promise.d.ts +1 -0
- package/cjs/table-export/util/promise.js +10 -0
- package/cjs/table-export/util/promise.js.map +1 -0
- package/cjs/table-export/util/type.d.ts +6 -0
- package/cjs/table-export/util/type.js +6 -0
- package/cjs/table-export/util/type.js.map +1 -0
- package/cjs/table-export.d.ts +17 -0
- package/cjs/table-export.js +93 -0
- package/cjs/table-export.js.map +1 -0
- package/cjs/types.js +1 -2
- package/cjs/wps-fill-handle.js +1 -0
- package/dist/vtable-plugins.js +1179 -185
- package/dist/vtable-plugins.min.js +14 -14
- package/es/index.d.ts +1 -0
- package/es/index.js +2 -0
- package/es/index.js.map +1 -1
- package/es/table-export/csv/index.d.ts +12 -0
- package/es/table-export/csv/index.js +47 -0
- package/es/table-export/csv/index.js.map +1 -0
- package/es/table-export/excel/index.d.ts +21 -0
- package/es/table-export/excel/index.js +242 -0
- package/es/table-export/excel/index.js.map +1 -0
- package/es/table-export/excel/style.d.ts +6 -0
- package/es/table-export/excel/style.js +80 -0
- package/es/table-export/excel/style.js.map +1 -0
- package/es/table-export/index.d.ts +7 -0
- package/es/table-export/index.js +8 -0
- package/es/table-export/index.js.map +1 -0
- package/es/table-export/util/color.d.ts +152 -0
- package/es/table-export/util/color.js +189 -0
- package/es/table-export/util/color.js.map +1 -0
- package/es/table-export/util/download.d.ts +2 -0
- package/es/table-export/util/download.js +52 -0
- package/es/table-export/util/download.js.map +1 -0
- package/es/table-export/util/encode.d.ts +3 -0
- package/es/table-export/util/encode.js +10 -0
- package/es/table-export/util/encode.js.map +1 -0
- package/es/table-export/util/indent.d.ts +2 -0
- package/es/table-export/util/indent.js +19 -0
- package/es/table-export/util/indent.js.map +1 -0
- package/es/table-export/util/pagination.d.ts +5 -0
- package/es/table-export/util/pagination.js +16 -0
- package/es/table-export/util/pagination.js.map +1 -0
- package/es/table-export/util/promise.d.ts +1 -0
- package/es/table-export/util/promise.js +4 -0
- package/es/table-export/util/promise.js.map +1 -0
- package/es/table-export/util/type.d.ts +6 -0
- package/es/table-export/util/type.js +2 -0
- package/es/table-export/util/type.js.map +1 -0
- package/es/table-export.d.ts +17 -0
- package/es/table-export.js +62 -0
- package/es/table-export.js.map +1 -0
- package/es/types.js +1 -2
- package/es/wps-fill-handle.js +2 -1
- package/package.json +10 -8
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
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":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,UAAU,WAAW,CAAC,SAAoB,EAAE,QAAkB;IAClE,OAAO;QACL,IAAI,EAAE,0BAA0B,CAAC,SAAS,CAAC,UAAoB,CAAC,IAAI,OAAO;QAC3E,IAAI,EAAE,SAAS,CAAC,QAAQ,IAAI,EAAE;QAE9B,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC;QACtC,MAAM,EAAE,SAAS,CAAC,SAAS,KAAK,QAAQ;QACxC,KAAK,EAAE,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAE,SAAS,CAAC,UAAqB,CAAC,CAAC,CAAE,SAAS,CAAC,KAAgB,CAAC;QACrG,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,UAA2B;IAC7C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAClC,OAAO,UAAU,IAAI,GAAG,CAAC;KAC1B;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,UAAU,KAAK,MAAM,CAAC;AAC/B,CAAC;AAED,SAAS,0BAA0B,CAAC,UAAkB;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAoB;IAC9C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAiB,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAoB;;IAChD,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IACzG,IAAI,iBAAiB,IAAI,iBAAiB,EAAE;QAC1C,MAAM,MAAM,GAA6B,EAAE,CAAC;QAC5C,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACnG,MAAM,CAAC,GAAG,GAAG;gBACX,KAAK,EAAE,cAAc,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,eAA0B,EAAE,cAAc,CAAC;gBACxG,KAAK,EAAE,QAAQ,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,WAAsB,CAAC;aAC/E,CAAC;SACH;QACD,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACnG,MAAM,CAAC,KAAK,GAAG;gBACb,KAAK,EAAE,cAAc,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,eAA0B,EAAE,cAAc,CAAC;gBACxG,KAAK,EAAE,QAAQ,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,WAAsB,CAAC;aAC/E,CAAC;SACH;QACD,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACnG,MAAM,CAAC,MAAM,GAAG;gBACd,KAAK,EAAE,cAAc,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,eAA0B,EAAE,cAAc,CAAC;gBACxG,KAAK,EAAE,QAAQ,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,WAAsB,CAAC;aAC/E,CAAC;SACH;QACD,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACnG,MAAM,CAAC,IAAI,GAAG;gBACZ,KAAK,EAAE,cAAc,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,eAA0B,EAAE,cAAc,CAAC;gBACxG,KAAK,EAAE,QAAQ,CAAC,MAAC,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAY,mCAAK,WAAsB,CAAC;aAC/E,CAAC;SACH;QACD,OAAO,MAAM,CAAC;KACf;IAED,IAAI,eAAe,KAAK,CAAC,EAAE;QACzB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,cAAc,CAAC,eAAyB,EAAE,cAAc,CAAC;QAChE,KAAK,EAAE,QAAQ,CAAC,WAAqB,CAAC;KACvC,CAAC;IACF,OAAO;QACL,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;KACd,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,cAA4B;IAKrE,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,EAAE;QAC3C,IAAI,SAAS,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC;SACjB;QACD,OAAO,cAAc,CAAC;KACvB;IACD,IAAI,SAAS,IAAI,GAAG,EAAE;QACpB,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,SAAS,IAAI,CAAC,EAAE;QACzB,OAAO,MAAM,CAAC;KACf;SAAM,IAAI,SAAS,IAAI,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAC;KACjB;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAoB,EAAE,MAAc;IACnE,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,SAAS,IAAI,MAAM;QACzC,QAAQ,EAAE,SAAS,CAAC,YAAY,IAAI,QAAQ;QAC5C,QAAQ,EAAE,SAAS,CAAC,YAAY,IAAI,KAAK;QACzC,MAAM,EAAE,MAAM,IAAI,CAAC;KACb,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAE7B,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC","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"]}
|