rapid-spreadjs 1.0.26 → 1.0.28
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/dist/index.cjs.js +174 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +174 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/types/wookbook.d.ts +11 -0
- package/dist/utils/wookbook.d.ts +30 -0
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -7944,6 +7944,29 @@ const WorkbookUtils = {
|
|
|
7944
7944
|
}));
|
|
7945
7945
|
}
|
|
7946
7946
|
}),
|
|
7947
|
+
/**
|
|
7948
|
+
* 获取工作簿的Blob对象
|
|
7949
|
+
* @param spread 工作簿实例
|
|
7950
|
+
* @returns 返回异步的Promise对象(Blob对象)
|
|
7951
|
+
* @example
|
|
7952
|
+
* const saveSpread = async (spread: any) => {
|
|
7953
|
+
* try {
|
|
7954
|
+
* const blob = await WorkbookUtils.getWookbookBlob(spread);
|
|
7955
|
+
* console.log('获取成功:', blob);
|
|
7956
|
+
* } catch (error) {
|
|
7957
|
+
* console.error('获取失败:', error);
|
|
7958
|
+
* }
|
|
7959
|
+
* };
|
|
7960
|
+
*/
|
|
7961
|
+
getWookbookBlob: (spread) => __awaiter(void 0, void 0, void 0, function* () {
|
|
7962
|
+
return new Promise((resolve, reject) => {
|
|
7963
|
+
spread.save(
|
|
7964
|
+
// 成功回调
|
|
7965
|
+
(blob) => resolve(blob),
|
|
7966
|
+
// 失败回调
|
|
7967
|
+
(error) => reject(error));
|
|
7968
|
+
});
|
|
7969
|
+
}),
|
|
7947
7970
|
/**
|
|
7948
7971
|
* 打印所有工作表
|
|
7949
7972
|
* @param GC GC对象
|
|
@@ -8069,6 +8092,157 @@ const WorkbookUtils = {
|
|
|
8069
8092
|
// 销毁临时工作簿
|
|
8070
8093
|
tempSpread.destroy();
|
|
8071
8094
|
},
|
|
8095
|
+
/**
|
|
8096
|
+
* 合并多个工作簿并导出Excel(同时返回合并后的工作簿实例)
|
|
8097
|
+
* @param GC Spread的GC对象
|
|
8098
|
+
* @param spreads 工作簿实例集合
|
|
8099
|
+
* @param exportName 导出的文件名称,不传则为第一个Sheet的名称
|
|
8100
|
+
* @returns 合并后的工作簿实例
|
|
8101
|
+
*/
|
|
8102
|
+
mergeWorkbooksToExcel: (GC, spreads, exportName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
8103
|
+
if (!spreads || spreads.length == 0) {
|
|
8104
|
+
return;
|
|
8105
|
+
}
|
|
8106
|
+
// 主工作簿
|
|
8107
|
+
const mainWorkbook = new GC.Spread.Sheets.Workbook();
|
|
8108
|
+
// 暂停绘制
|
|
8109
|
+
mainWorkbook.suspendPaint();
|
|
8110
|
+
mainWorkbook.fromJSON(spreads[0].toJSON());
|
|
8111
|
+
for (let i = 1; i < spreads.length; i++) {
|
|
8112
|
+
// 临时工作簿
|
|
8113
|
+
const tempSpread = new GC.Spread.Sheets.Workbook();
|
|
8114
|
+
// 暂停绘制
|
|
8115
|
+
tempSpread.suspendPaint();
|
|
8116
|
+
tempSpread.fromJSON(spreads[i].toJSON());
|
|
8117
|
+
// 重命名样式表
|
|
8118
|
+
const styleSign = i + '';
|
|
8119
|
+
tempSpread.getNamedStyles().forEach(function (namedStyle) {
|
|
8120
|
+
namedStyle.name = `new_${styleSign}_${namedStyle.name}`;
|
|
8121
|
+
mainWorkbook.addNamedStyle(namedStyle);
|
|
8122
|
+
});
|
|
8123
|
+
// 当前临时工作簿的第一个工作表
|
|
8124
|
+
let tempSheet = tempSpread.getSheet(0);
|
|
8125
|
+
// 导出为JSON字符串
|
|
8126
|
+
let tempSheetJSON = JSON.stringify(tempSheet.toJSON());
|
|
8127
|
+
// 替换当前JSON字符串的style或parentName配置,目的是重命名样式名称,和上述的tempSpread重命名样式表保持一致
|
|
8128
|
+
tempSheetJSON = tempSheetJSON.replace(/"style":"/g, '"style":"new_' + styleSign + '_');
|
|
8129
|
+
tempSheetJSON = tempSheetJSON.replace(/"parentName":"/g, '"parentName":"new_' + styleSign + '_');
|
|
8130
|
+
// 创建新的工作表并添加到主工作簿中
|
|
8131
|
+
let newSheet = new GC.Spread.Sheets.Worksheet(`newSheet${styleSign}_`);
|
|
8132
|
+
mainWorkbook.addSheet(mainWorkbook.getSheetCount(), newSheet);
|
|
8133
|
+
newSheet.fromJSON(JSON.parse(tempSheetJSON));
|
|
8134
|
+
// 获取新创建的工作表newSheet的行数
|
|
8135
|
+
const newSheetRowCount = newSheet.getRowCount();
|
|
8136
|
+
// 当前操作的主工作簿的Sheet
|
|
8137
|
+
const curMainSheet = mainWorkbook.getSheet(0);
|
|
8138
|
+
// 如果是表尾,则在表单的最后一行开始添加
|
|
8139
|
+
curMainSheet.addRows(curMainSheet.getRowCount(), newSheetRowCount);
|
|
8140
|
+
// 设置复制和粘贴的范围
|
|
8141
|
+
let pastedRangesStartRow = curMainSheet.getRowCount() - newSheetRowCount;
|
|
8142
|
+
const fromRanges = [new GC.Spread.Sheets.Range(-1, -1, -1, -1)], pastedRanges = [new GC.Spread.Sheets.Range(pastedRangesStartRow, 0, newSheetRowCount, newSheet.getColumnCount())];
|
|
8143
|
+
mainWorkbook.commandManager().execute({
|
|
8144
|
+
cmd: 'clipboardPaste',
|
|
8145
|
+
sheetName: curMainSheet.name(), //此参数的作用是:粘贴到某个名称的Sheet中
|
|
8146
|
+
fromSheet: newSheet,
|
|
8147
|
+
fromRanges: fromRanges,
|
|
8148
|
+
pastedRanges: pastedRanges,
|
|
8149
|
+
isCutting: false,
|
|
8150
|
+
clipboardText: '',
|
|
8151
|
+
pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all,
|
|
8152
|
+
});
|
|
8153
|
+
// 删除最后的Sheet,也就是newSheet对象
|
|
8154
|
+
mainWorkbook.removeSheet(mainWorkbook.getSheetCount() - 1);
|
|
8155
|
+
// 取消选中状态
|
|
8156
|
+
curMainSheet.clearSelection();
|
|
8157
|
+
// 恢复绘制
|
|
8158
|
+
tempSpread.resumePaint();
|
|
8159
|
+
// 销毁临时工作簿
|
|
8160
|
+
tempSpread.destroy();
|
|
8161
|
+
}
|
|
8162
|
+
// 获取当前活动的工作表
|
|
8163
|
+
const sheet = mainWorkbook.getActiveSheet();
|
|
8164
|
+
// 设置缩放比为1
|
|
8165
|
+
sheet.zoom(1);
|
|
8166
|
+
// 隐藏行和列的头部
|
|
8167
|
+
sheet.options.rowHeaderVisible = true;
|
|
8168
|
+
sheet.options.colHeaderVisible = true;
|
|
8169
|
+
// 隐藏Tab、水平和垂直的滚动条
|
|
8170
|
+
mainWorkbook.options.tabStripVisible = true;
|
|
8171
|
+
mainWorkbook.options.showHorizontalScrollbar = true;
|
|
8172
|
+
mainWorkbook.options.showVerticalScrollbar = true;
|
|
8173
|
+
// 滚动条是否与活动工作表的最后一行和最后一列对齐(避免滚动的时候出现灰色区域)
|
|
8174
|
+
mainWorkbook.options.scrollbarMaxAlign = false;
|
|
8175
|
+
// 恢复绘制
|
|
8176
|
+
mainWorkbook.resumePaint();
|
|
8177
|
+
// 导出Excel文件
|
|
8178
|
+
WorkbookUtils.exportToExcel(GC, mainWorkbook, exportName);
|
|
8179
|
+
return mainWorkbook;
|
|
8180
|
+
}),
|
|
8181
|
+
/**
|
|
8182
|
+
* 注册字体(主要为导出PDF使用)
|
|
8183
|
+
* @param GC Spread的GC对象
|
|
8184
|
+
* @param regFonts 字体配置集合
|
|
8185
|
+
*/
|
|
8186
|
+
registerFont: (GC, regFonts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
8187
|
+
// 基于fetch
|
|
8188
|
+
return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
|
|
8189
|
+
try {
|
|
8190
|
+
if (!regFonts || regFonts.length == 0) {
|
|
8191
|
+
resolve(null);
|
|
8192
|
+
}
|
|
8193
|
+
for (let i = 0; i < regFonts.length; i++) {
|
|
8194
|
+
const font = regFonts[i];
|
|
8195
|
+
const response = yield fetch(font.url, { method: 'GET' });
|
|
8196
|
+
if (response.ok) {
|
|
8197
|
+
const blob = yield response.blob();
|
|
8198
|
+
var reader = new FileReader();
|
|
8199
|
+
reader.readAsArrayBuffer(blob);
|
|
8200
|
+
reader.onload = function (e) {
|
|
8201
|
+
var fontArrayBuffer = reader.result;
|
|
8202
|
+
var fonts = {};
|
|
8203
|
+
fonts[font.type] = fontArrayBuffer;
|
|
8204
|
+
GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(font.name, fonts);
|
|
8205
|
+
resolve(blob);
|
|
8206
|
+
};
|
|
8207
|
+
}
|
|
8208
|
+
}
|
|
8209
|
+
}
|
|
8210
|
+
catch (error) {
|
|
8211
|
+
reject(error);
|
|
8212
|
+
}
|
|
8213
|
+
}));
|
|
8214
|
+
// 基于XMLHttpRequest
|
|
8215
|
+
// return new Promise((resolve, reject) => {
|
|
8216
|
+
// try {
|
|
8217
|
+
// if (!regFonts || regFonts.length == 0) {
|
|
8218
|
+
// resolve(null);
|
|
8219
|
+
// }
|
|
8220
|
+
// for (let i = 0; i < regFonts.length; i++) {
|
|
8221
|
+
// const font = regFonts[i];
|
|
8222
|
+
// var xhr = new XMLHttpRequest();
|
|
8223
|
+
// xhr.open('GET', font.url, true);
|
|
8224
|
+
// xhr.responseType = 'blob';
|
|
8225
|
+
// xhr.onload = function (e) {
|
|
8226
|
+
// if (this.status == 200) {
|
|
8227
|
+
// var blob = this.response;
|
|
8228
|
+
// var reader = new FileReader();
|
|
8229
|
+
// reader.onload = function (e) {
|
|
8230
|
+
// var fontArrayBuffer = reader.result;
|
|
8231
|
+
// var fonts = {};
|
|
8232
|
+
// fonts[font.type] = fontArrayBuffer;
|
|
8233
|
+
// GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(font.name, fonts);
|
|
8234
|
+
// resolve(blob);
|
|
8235
|
+
// };
|
|
8236
|
+
// reader.readAsArrayBuffer(blob);
|
|
8237
|
+
// }
|
|
8238
|
+
// };
|
|
8239
|
+
// xhr.send();
|
|
8240
|
+
// }
|
|
8241
|
+
// } catch (error) {
|
|
8242
|
+
// reject(error);
|
|
8243
|
+
// }
|
|
8244
|
+
// });
|
|
8245
|
+
}),
|
|
8072
8246
|
};
|
|
8073
8247
|
|
|
8074
8248
|
exports.BusinessUtils = BusinessUtils;
|