@corbe30/fortune-excel 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/.github/workflows/main.yml +30 -0
  2. package/.github/workflows/publish.yml +30 -0
  3. package/.storybook/main.ts +18 -0
  4. package/.storybook/preview.ts +15 -0
  5. package/LICENSE +21 -0
  6. package/README.md +59 -0
  7. package/dist/HandleZip.d.ts +8 -0
  8. package/dist/HandleZip.js +37 -0
  9. package/dist/ICommon.d.ts +34 -0
  10. package/dist/ICommon.js +1 -0
  11. package/dist/ToExcel/ExcelBorder.d.ts +3 -0
  12. package/dist/ToExcel/ExcelBorder.js +1412 -0
  13. package/dist/ToExcel/ExcelConvert.d.ts +16 -0
  14. package/dist/ToExcel/ExcelConvert.js +92 -0
  15. package/dist/ToExcel/ExcelFile.d.ts +1 -0
  16. package/dist/ToExcel/ExcelFile.js +30 -0
  17. package/dist/ToExcel/ExcelImage.d.ts +2 -0
  18. package/dist/ToExcel/ExcelImage.js +64 -0
  19. package/dist/ToExcel/ExcelStyle.d.ts +3 -0
  20. package/dist/ToExcel/ExcelStyle.js +53 -0
  21. package/dist/ToFortuneSheet/FortuneBase.d.ts +133 -0
  22. package/dist/ToFortuneSheet/FortuneBase.js +28 -0
  23. package/dist/ToFortuneSheet/FortuneCell.d.ts +25 -0
  24. package/dist/ToFortuneSheet/FortuneCell.js +782 -0
  25. package/dist/ToFortuneSheet/FortuneFile.d.ts +50 -0
  26. package/dist/ToFortuneSheet/FortuneFile.js +432 -0
  27. package/dist/ToFortuneSheet/FortuneImage.d.ts +20 -0
  28. package/dist/ToFortuneSheet/FortuneImage.js +51 -0
  29. package/dist/ToFortuneSheet/FortuneSheet.d.ts +36 -0
  30. package/dist/ToFortuneSheet/FortuneSheet.js +581 -0
  31. package/dist/ToFortuneSheet/IFortune.d.ts +301 -0
  32. package/dist/ToFortuneSheet/IFortune.js +1 -0
  33. package/dist/ToFortuneSheet/ReadXml.d.ts +61 -0
  34. package/dist/ToFortuneSheet/ReadXml.js +337 -0
  35. package/dist/common/constant.d.ts +25 -0
  36. package/dist/common/constant.js +277 -0
  37. package/dist/common/emf.d.ts +3 -0
  38. package/dist/common/emf.js +1294 -0
  39. package/dist/common/method.d.ts +132 -0
  40. package/dist/common/method.js +1075 -0
  41. package/dist/main.d.ts +2 -0
  42. package/dist/main.js +24 -0
  43. package/package.json +47 -0
  44. package/tsconfig.json +13 -0
@@ -0,0 +1,16 @@
1
+ import ExcelJS from "exceljs";
2
+ declare var fillConvert: (bg: string) => ExcelJS.Fill;
3
+ declare var fontConvert: (ff?: string, fc?: string, bl?: number, it?: number, fs?: number, cl?: number, ul?: number) => {
4
+ name: string;
5
+ family: number;
6
+ size: number;
7
+ color: {
8
+ argb: string;
9
+ };
10
+ bold: boolean;
11
+ italic: boolean;
12
+ underline: boolean;
13
+ strike: boolean;
14
+ };
15
+ declare var alignmentConvert: (vt?: number, ht?: number, tb?: number, tr?: number) => Partial<ExcelJS.Alignment>;
16
+ export { fillConvert, fontConvert, alignmentConvert };
@@ -0,0 +1,92 @@
1
+ import { ALIGNMENT_DEFAULT } from "../common/constant.js";
2
+ import { rgb2hex } from "../common/method.js";
3
+ var fillConvert = function (bg) {
4
+ if (!bg) {
5
+ return null;
6
+ // return {
7
+ // type: 'pattern',
8
+ // pattern: 'solid',
9
+ // fgColor:{argb:'#ffffff'.replace('#','')}
10
+ // }
11
+ }
12
+ bg = bg.indexOf("rgb") > -1 ? rgb2hex(bg) : bg;
13
+ let fill = {
14
+ type: "pattern",
15
+ pattern: "solid",
16
+ fgColor: { argb: bg.replace("#", "") },
17
+ };
18
+ return fill;
19
+ };
20
+ var fontConvert = function (ff = "", fc = "#000000", bl = 0, it = 0, fs = 10, cl = 0, ul = 0) {
21
+ // luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线)
22
+ const luckyToExcel = {
23
+ 0: "微软雅黑",
24
+ 1: "宋体(Song)",
25
+ 2: "黑体(ST Heiti)",
26
+ 3: "楷体(ST Kaiti)",
27
+ 4: "仿宋(ST FangSong)",
28
+ 5: "新宋体(ST Song)",
29
+ 6: "华文新魏",
30
+ 7: "华文行楷",
31
+ 8: "华文隶书",
32
+ 9: "Arial",
33
+ 10: "Times New Roman ",
34
+ 11: "Tahoma ",
35
+ 12: "Verdana",
36
+ num2bl: function (num) {
37
+ return num === 0 ? false : true;
38
+ },
39
+ };
40
+ let color = (fc + "").indexOf("rgb") > -1 ? rgb2hex(fc) : fc;
41
+ let font = {
42
+ name: ff,
43
+ family: 1,
44
+ size: fs,
45
+ color: { argb: color.replace("#", "") },
46
+ bold: luckyToExcel.num2bl(bl),
47
+ italic: luckyToExcel.num2bl(it),
48
+ underline: luckyToExcel.num2bl(ul),
49
+ strike: luckyToExcel.num2bl(cl),
50
+ };
51
+ return font;
52
+ };
53
+ var alignmentConvert = function (vt = ALIGNMENT_DEFAULT, ht = ALIGNMENT_DEFAULT, tb = ALIGNMENT_DEFAULT, tr = ALIGNMENT_DEFAULT) {
54
+ // luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转)
55
+ const luckyToExcel = {
56
+ vertical: {
57
+ 0: "middle",
58
+ 1: "top",
59
+ 2: "bottom",
60
+ ALIGNMENT_DEFAULT: "top",
61
+ },
62
+ horizontal: {
63
+ 0: "center",
64
+ 1: "left",
65
+ 2: "right",
66
+ ALIGNMENT_DEFAULT: "left",
67
+ },
68
+ wrapText: {
69
+ 0: false,
70
+ 1: false,
71
+ 2: true,
72
+ ALIGNMENT_DEFAULT: false,
73
+ },
74
+ textRotation: {
75
+ 0: 0,
76
+ 1: 45,
77
+ 2: -45,
78
+ 3: "vertical",
79
+ 4: 90,
80
+ 5: -90,
81
+ ALIGNMENT_DEFAULT: 0,
82
+ },
83
+ };
84
+ let alignment = {
85
+ vertical: luckyToExcel.vertical[vt],
86
+ horizontal: luckyToExcel.horizontal[ht],
87
+ wrapText: luckyToExcel.wrapText[tb],
88
+ textRotation: luckyToExcel.textRotation[tr],
89
+ };
90
+ return alignment;
91
+ };
92
+ export { fillConvert, fontConvert, alignmentConvert };
@@ -0,0 +1 @@
1
+ export declare function exportSheetExcel(luckysheetRef: any): Promise<void>;
@@ -0,0 +1,30 @@
1
+ import ExcelJS from "exceljs";
2
+ import * as fileSaver from "file-saver";
3
+ import { setStyleAndValue } from "./ExcelStyle.js";
4
+ import { setMerge } from "../common/method.js";
5
+ import { setImages } from "./ExcelImage.js";
6
+ import { setBorder } from "./ExcelBorder.js";
7
+ export async function exportSheetExcel(luckysheetRef) {
8
+ const luckysheet = luckysheetRef.getAllSheets();
9
+ // 参数为luckysheet.getluckysheetfile()获取的对象
10
+ // 1.创建工作簿,可以为工作簿添加属性
11
+ const workbook = new ExcelJS.Workbook();
12
+ // 2.创建表格,第二个参数可以配置创建什么样的工作表
13
+ luckysheet.every(function (table) {
14
+ var _a, _b;
15
+ if (((_a = table === null || table === void 0 ? void 0 : table.data) === null || _a === void 0 ? void 0 : _a.length) === 0)
16
+ return true;
17
+ const worksheet = workbook.addWorksheet(table.name);
18
+ // 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值
19
+ setStyleAndValue(luckysheetRef, table.data, worksheet);
20
+ setMerge((_b = table === null || table === void 0 ? void 0 : table.config) === null || _b === void 0 ? void 0 : _b.merge, worksheet);
21
+ setBorder(table, worksheet);
22
+ setImages(table, worksheet, workbook);
23
+ return true;
24
+ });
25
+ // 4.写入 buffer
26
+ const buffer = await workbook.xlsx.writeBuffer();
27
+ const fileData = new Blob([buffer]);
28
+ // 5.保存为文件
29
+ fileSaver.saveAs(fileData, "abc.xlsx");
30
+ }
@@ -0,0 +1,2 @@
1
+ declare var setImages: (table: any, worksheet: any, workbook: any) => void;
2
+ export { setImages };
@@ -0,0 +1,64 @@
1
+ //获取图片在单元格的位置
2
+ var getImagePosition = function (num, arr) {
3
+ let index = 0;
4
+ let minIndex;
5
+ let maxIndex;
6
+ for (let i = 0; i < arr.length; i++) {
7
+ if (num < arr[i]) {
8
+ index = i;
9
+ break;
10
+ }
11
+ }
12
+ if (index == 0) {
13
+ minIndex = 0;
14
+ maxIndex = 1;
15
+ return Math.abs((num - 0) / (arr[maxIndex] - arr[minIndex])) + index;
16
+ }
17
+ else if (index == arr.length - 1) {
18
+ minIndex = arr.length - 2;
19
+ maxIndex = arr.length - 1;
20
+ }
21
+ else {
22
+ minIndex = index - 1;
23
+ maxIndex = index;
24
+ }
25
+ let min = arr[minIndex];
26
+ let max = arr[maxIndex];
27
+ let radio = Math.abs((num - min) / (max - min)) + index;
28
+ return radio;
29
+ };
30
+ var setImages = function (table, worksheet, workbook) {
31
+ const localTable = Object.assign({}, table);
32
+ let { images, visibledatacolumn, //所有行的位置
33
+ visibledatarow, //所有列的位置
34
+ } = localTable;
35
+ if (typeof images != "object")
36
+ return;
37
+ for (let key in images) {
38
+ // 通过 base64 将图像添加到工作簿
39
+ const myBase64Image = images[key].src;
40
+ //开始行 开始列 结束行 结束列
41
+ const item = images[key];
42
+ const imageId = workbook.addImage({
43
+ base64: myBase64Image,
44
+ extension: "png",
45
+ });
46
+ const col_st = getImagePosition(item.default.left, visibledatacolumn);
47
+ const row_st = getImagePosition(item.default.top, visibledatarow);
48
+ //模式1,图片左侧与luckysheet位置一样,像素比例保持不变,但是,右侧位置可能与原图所在单元格不一致
49
+ worksheet.addImage(imageId, {
50
+ tl: { col: col_st, row: row_st },
51
+ ext: { width: item.default.width, height: item.default.height },
52
+ });
53
+ //模式2,图片四个角位置没有变动,但是图片像素比例可能和原图不一样
54
+ // const w_ed = item.default.left+item.default.width;
55
+ // const h_ed = item.default.top+item.default.height;
56
+ // const col_ed = getImagePosition(w_ed,visibledatacolumn);
57
+ // const row_ed = getImagePosition(h_ed,visibledatarow);
58
+ // worksheet.addImage(imageId, {
59
+ // tl: { col: col_st, row: row_st},
60
+ // br: { col: col_ed, row: row_ed},
61
+ // });
62
+ }
63
+ };
64
+ export { setImages };
@@ -0,0 +1,3 @@
1
+ import ExcelJS from "exceljs";
2
+ declare var setStyleAndValue: (luckysheet: any, cellArr: any, worksheet: ExcelJS.Worksheet) => void;
3
+ export { setStyleAndValue };
@@ -0,0 +1,53 @@
1
+ import { fillConvert, fontConvert, alignmentConvert } from "./ExcelConvert.js";
2
+ var setStyleAndValue = function (luckysheet, cellArr, worksheet) {
3
+ if (!Array.isArray(cellArr))
4
+ return;
5
+ cellArr.forEach(function (row, rowid) {
6
+ const dbrow = worksheet.getRow(rowid + 1);
7
+ //设置单元格行高,默认乘以1.2倍
8
+ dbrow.height = luckysheet.getRowHeight([rowid])[rowid] / 1.2;
9
+ row.every(function (cell, columnid) {
10
+ if (!cell)
11
+ return true;
12
+ if (rowid == 0) {
13
+ const dobCol = worksheet.getColumn(columnid + 1);
14
+ //设置单元格列宽除以8
15
+ dobCol.width = luckysheet.getColumnWidth([columnid])[columnid] / 8;
16
+ }
17
+ let fill = fillConvert(cell.bg);
18
+ let font = fontConvert(cell.ff, cell.fc, cell.bl, cell.it, cell.fs, cell.cl, cell.un);
19
+ let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb && parseInt(cell.tb, 10), cell.tr && parseInt(cell.tr, 10));
20
+ let value;
21
+ var v = "";
22
+ // TODO: check and add support for currency, boolean, date format
23
+ if (cell.ct && cell.ct.t == "inlineStr") {
24
+ var s = cell.ct.s;
25
+ s.forEach(function (val, num) {
26
+ v += val.v;
27
+ });
28
+ }
29
+ else if (cell.ct && cell.ct.t == "n") {
30
+ v = +cell.v;
31
+ }
32
+ else {
33
+ v = cell.v;
34
+ }
35
+ if (cell.f) {
36
+ value = {
37
+ formula: cell.f.startsWith("=") ? cell.f.slice(1) : cell.f,
38
+ result: v,
39
+ };
40
+ }
41
+ else {
42
+ value = v;
43
+ }
44
+ let target = worksheet.getCell(rowid + 1, columnid + 1);
45
+ target.fill = fill;
46
+ target.font = font;
47
+ target.alignment = alignment;
48
+ target.value = value;
49
+ return true;
50
+ });
51
+ });
52
+ };
53
+ export { setStyleAndValue };
@@ -0,0 +1,133 @@
1
+ import { IFortuneFile, IFortuneFileInfo, IfortuneSheet, IfortuneSheetCelldata, IfortuneSheetConfig, IfortuneSheetCelldataValue, IfortuneSheetCelldataValueMerge, IFortuneSheetCellFormat, IfortuneSheetConfigMerges, IfortuneSheetConfigMerge, IfortuneSheetborderInfoCellValue, IfortuneSheetborderInfoCellValueStyle, IfortuneSheetborderInfoCellForImp, IfortuneSheetRowAndColumnLen, IfortuneSheetRowAndColumnHidden, IfortuneSheetSelection, IfortunesheetFrozen, IfortuneSheetChart, IfortuneSheetPivotTable, IfortunesheetConditionFormat, IfortunesheetCalcChain, IFortuneInlineString, IfortuneImage, IfortuneImageBorder, IfortuneImageCrop, IfortuneImageDefault, IfortuneImages, IfortunesheetHyperlink, IfortunesheetDataVerification } from "./IFortune.js";
2
+ export declare class FortuneFileBase implements IFortuneFile {
3
+ info: IFortuneFileInfo;
4
+ sheets: IfortuneSheet[];
5
+ }
6
+ export declare class FortuneSheetBase implements IfortuneSheet {
7
+ name: string;
8
+ color: string;
9
+ config: IfortuneSheetConfig;
10
+ id: string;
11
+ status: string;
12
+ order: string;
13
+ row: number;
14
+ column: number;
15
+ luckysheet_select_save: IfortuneSheetSelection[];
16
+ scrollLeft: number;
17
+ scrollTop: number;
18
+ zoomRatio: number;
19
+ showGridLines: string;
20
+ defaultColWidth: number;
21
+ defaultRowHeight: number;
22
+ celldata: IfortuneSheetCelldata[];
23
+ chart: IfortuneSheetChart[];
24
+ isPivotTable: boolean;
25
+ pivotTable: IfortuneSheetPivotTable;
26
+ luckysheet_conditionformat_save: IfortunesheetConditionFormat[];
27
+ freezen: IfortunesheetFrozen;
28
+ calcChain: IfortunesheetCalcChain[];
29
+ images: IfortuneImages;
30
+ dataVerification: IfortunesheetDataVerification;
31
+ hyperlink: IfortunesheetHyperlink;
32
+ hide: number;
33
+ }
34
+ export declare class FortuneFileInfo implements IFortuneFileInfo {
35
+ name: string;
36
+ creator: string;
37
+ lastmodifiedby: string;
38
+ createdTime: string;
39
+ modifiedTime: string;
40
+ company: string;
41
+ appversion: string;
42
+ }
43
+ export declare class FortuneSheetCelldataBase implements IfortuneSheetCelldata {
44
+ r: number;
45
+ c: number;
46
+ v: IfortuneSheetCelldataValue | string | null;
47
+ }
48
+ export declare class FortuneSheetCelldataValue implements IfortuneSheetCelldataValue {
49
+ ct: FortuneSheetCellFormat | undefined;
50
+ bg: string | undefined;
51
+ ff: string | undefined;
52
+ fc: string | undefined;
53
+ bl: number | undefined;
54
+ it: number | undefined;
55
+ fs: number | undefined;
56
+ cl: number | undefined;
57
+ un: number | undefined;
58
+ vt: number | undefined;
59
+ ht: number | undefined;
60
+ mc: IfortuneSheetCelldataValueMerge | undefined;
61
+ tr: number | undefined;
62
+ tb: number | undefined;
63
+ v: string | undefined;
64
+ m: string | undefined;
65
+ f: string | undefined;
66
+ rt: number | undefined;
67
+ qp: number | undefined;
68
+ }
69
+ export declare class FortuneSheetCellFormat implements IFortuneSheetCellFormat {
70
+ fa: string;
71
+ t: string;
72
+ s: FortuneInlineString[] | undefined;
73
+ }
74
+ export declare class FortuneInlineString implements IFortuneInlineString {
75
+ ff: string | undefined;
76
+ fc: string | undefined;
77
+ fs: number | undefined;
78
+ cl: number | undefined;
79
+ un: number | undefined;
80
+ bl: number | undefined;
81
+ it: number | undefined;
82
+ va: number | undefined;
83
+ v: string | undefined;
84
+ }
85
+ export declare class FortuneConfig implements IfortuneSheetConfig {
86
+ merge: IfortuneSheetConfigMerges;
87
+ borderInfo: IfortuneSheetborderInfoCellForImp[];
88
+ rowlen: IfortuneSheetRowAndColumnLen;
89
+ columnlen: IfortuneSheetRowAndColumnLen;
90
+ rowhidden: IfortuneSheetRowAndColumnHidden;
91
+ colhidden: IfortuneSheetRowAndColumnHidden;
92
+ customHeight: IfortuneSheetRowAndColumnHidden;
93
+ customWidth: IfortuneSheetRowAndColumnHidden;
94
+ }
95
+ export declare class FortuneSheetborderInfoCellForImp implements IfortuneSheetborderInfoCellForImp {
96
+ rangeType: string;
97
+ value: IfortuneSheetborderInfoCellValue;
98
+ }
99
+ export declare class FortuneSheetborderInfoCellValue implements IfortuneSheetborderInfoCellValue {
100
+ row_index: number;
101
+ col_index: number;
102
+ l: IfortuneSheetborderInfoCellValueStyle;
103
+ r: IfortuneSheetborderInfoCellValueStyle;
104
+ t: IfortuneSheetborderInfoCellValueStyle;
105
+ b: IfortuneSheetborderInfoCellValueStyle;
106
+ }
107
+ export declare class FortuneSheetborderInfoCellValueStyle implements IfortuneSheetborderInfoCellValueStyle {
108
+ "style": number;
109
+ "color": string;
110
+ }
111
+ export declare class FortuneSheetConfigMerge implements IfortuneSheetConfigMerge {
112
+ r: number;
113
+ c: number;
114
+ rs: number;
115
+ cs: number;
116
+ }
117
+ export declare class FortunesheetCalcChain implements IfortunesheetCalcChain {
118
+ r: number;
119
+ c: number;
120
+ id: string | undefined;
121
+ }
122
+ export declare class FortuneImageBase implements IfortuneImage {
123
+ border: IfortuneImageBorder;
124
+ crop: IfortuneImageCrop;
125
+ default: IfortuneImageDefault;
126
+ fixedLeft: number;
127
+ fixedTop: number;
128
+ isFixedPos: Boolean;
129
+ originHeight: number;
130
+ originWidth: number;
131
+ src: string;
132
+ type: string;
133
+ }
@@ -0,0 +1,28 @@
1
+ export class FortuneFileBase {
2
+ }
3
+ export class FortuneSheetBase {
4
+ }
5
+ export class FortuneFileInfo {
6
+ }
7
+ export class FortuneSheetCelldataBase {
8
+ }
9
+ export class FortuneSheetCelldataValue {
10
+ }
11
+ export class FortuneSheetCellFormat {
12
+ }
13
+ export class FortuneInlineString {
14
+ }
15
+ export class FortuneConfig {
16
+ }
17
+ export class FortuneSheetborderInfoCellForImp {
18
+ }
19
+ export class FortuneSheetborderInfoCellValue {
20
+ }
21
+ export class FortuneSheetborderInfoCellValueStyle {
22
+ }
23
+ export class FortuneSheetConfigMerge {
24
+ }
25
+ export class FortunesheetCalcChain {
26
+ }
27
+ export class FortuneImageBase {
28
+ }
@@ -0,0 +1,25 @@
1
+ import { IfortuneSheetborderInfoCellForImp } from "./IFortune.js";
2
+ import { ReadXml, Element, IStyleCollections } from "./ReadXml.js";
3
+ import { FortuneSheetCelldataBase } from "./FortuneBase.js";
4
+ export declare class FortuneSheetCelldata extends FortuneSheetCelldataBase {
5
+ _borderObject: IfortuneSheetborderInfoCellForImp;
6
+ _fomulaRef: string;
7
+ _formulaSi: string;
8
+ _formulaType: string;
9
+ private sheetFile;
10
+ private readXml;
11
+ private cell;
12
+ private styles;
13
+ private sharedStrings;
14
+ private mergeCells;
15
+ constructor(cell: Element, styles: IStyleCollections, sharedStrings: Element[], mergeCells: Element[], sheetFile: string, ReadXml: ReadXml);
16
+ /**
17
+ * @param s Style index ,start 1
18
+ * @param t Cell type, Optional value is ST_CellType, it's found at constat.ts
19
+ */
20
+ private generateValue;
21
+ private replaceSpecialWrap;
22
+ private getBackgroundByFill;
23
+ private getBorderInfo;
24
+ private htmlDecode;
25
+ }