rapid-spreadjs 1.0.18 → 1.0.20
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 +80 -17
- 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.esm.js +81 -18
- 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/utils/sheet.d.ts +19 -1
- package/dist/utils/wookbook.d.ts +8 -0
- package/package.json +2 -2
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as echarts from 'echarts';
|
|
2
2
|
import * as math from 'mathjs';
|
|
3
|
-
import { orderByJson } from 'rapid-utils';
|
|
3
|
+
import { groupByJson, forEachJson, orderByJson } from 'rapid-utils';
|
|
4
4
|
import { saveAs } from 'file-saver';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -7289,7 +7289,18 @@ const SheetUtils = {
|
|
|
7289
7289
|
sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);
|
|
7290
7290
|
},
|
|
7291
7291
|
/**
|
|
7292
|
-
*
|
|
7292
|
+
* 获取某工作表中某个范围中所有的单元格坐标对象集合
|
|
7293
|
+
* 该方法适用的场景如:手动选择了某个单元格范围,在这个范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象
|
|
7294
|
+
* @param sheet 工作表实例
|
|
7295
|
+
* @param selectRange 单元格范围,格式如:{ row: 0, col: 0, rowCount: 2, colCount: 2 }
|
|
7296
|
+
* @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)
|
|
7297
|
+
* @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]
|
|
7298
|
+
*/
|
|
7299
|
+
getAllCellObjsByRange: (sheet, selectRange, isMulColOrder = false) => {
|
|
7300
|
+
return SheetUtils.getAllCellObjsByRanges(sheet, [selectRange], isMulColOrder);
|
|
7301
|
+
},
|
|
7302
|
+
/**
|
|
7303
|
+
* 获取某工作表中多个范围集合中所有的单元格坐标对象集合
|
|
7293
7304
|
* 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象
|
|
7294
7305
|
* @param sheet 工作表实例
|
|
7295
7306
|
* @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]
|
|
@@ -7410,6 +7421,41 @@ const SheetUtils = {
|
|
|
7410
7421
|
const sheet = spread.getActiveSheet();
|
|
7411
7422
|
return SheetUtils.getSheetSelectVals(sheet, isMulColOrder, nullUndefinedReplaceVal);
|
|
7412
7423
|
},
|
|
7424
|
+
/**
|
|
7425
|
+
* 获取某工作表指定范围单元格的值集合(二维数组,格式如:[[1,2,3],[4,5,6]])
|
|
7426
|
+
* @param sheet 工作表实例
|
|
7427
|
+
* @param cellRange 单元格范围
|
|
7428
|
+
* @param groupType 分组字段属性(row或col),默认为:row
|
|
7429
|
+
* @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)
|
|
7430
|
+
* @returns 返回某工作表指定范围单元格的值集合(二维数组,格式如:[[1,2,3],[4,5,6]])
|
|
7431
|
+
*/
|
|
7432
|
+
getSheetRangeValsByGroup: (sheet, cellRange, groupType = 'row', nullUndefinedReplaceVal) => {
|
|
7433
|
+
// 暂停绘制
|
|
7434
|
+
sheet.suspendPaint();
|
|
7435
|
+
const valCells = SheetUtils.getAllCellObjsByRange(sheet, cellRange);
|
|
7436
|
+
// 按照JSON数组中某个字段进行分组(groupType为row或col)
|
|
7437
|
+
const groupByCells = groupByJson(valCells, groupType);
|
|
7438
|
+
// 最终返回结果(二维数组)
|
|
7439
|
+
const retVals = [];
|
|
7440
|
+
// 遍历分组JSON对象(groupByCells的格式为:{key1: [cell1, cell2, ...], key2: [cell1, cell2, ...], ...})
|
|
7441
|
+
forEachJson(groupByCells, (curGroupCells, key, source) => {
|
|
7442
|
+
// 当前按照row或col分组的单元格的值集合
|
|
7443
|
+
const curVals = [];
|
|
7444
|
+
// 遍历当前分组的所有单元格
|
|
7445
|
+
forEachJson(curGroupCells, (item, index, source) => {
|
|
7446
|
+
let cellVal = sheet.getValue(item.row, item.col);
|
|
7447
|
+
// 如果cellVal为null或undefined,并且nullUndefinedReplaceVal不为null或undefined,则将cellVal替换为nullUndefinedReplaceVal
|
|
7448
|
+
if (nullUndefinedReplaceVal != null && nullUndefinedReplaceVal != undefined && (cellVal === null || cellVal === undefined)) {
|
|
7449
|
+
cellVal = nullUndefinedReplaceVal;
|
|
7450
|
+
}
|
|
7451
|
+
curVals.push(cellVal);
|
|
7452
|
+
});
|
|
7453
|
+
retVals.push(curVals);
|
|
7454
|
+
});
|
|
7455
|
+
// 恢复绘制
|
|
7456
|
+
sheet.resumePaint();
|
|
7457
|
+
return retVals;
|
|
7458
|
+
},
|
|
7413
7459
|
/**
|
|
7414
7460
|
* 获取单元格类型名称
|
|
7415
7461
|
* @param GC GC对象
|
|
@@ -7677,11 +7723,39 @@ const SheetUtils = {
|
|
|
7677
7723
|
},
|
|
7678
7724
|
};
|
|
7679
7725
|
|
|
7680
|
-
// 导出Excel文件所需的第三方包
|
|
7681
7726
|
/**
|
|
7682
7727
|
* SpreadJS工作簿工具函数属性
|
|
7683
7728
|
*/
|
|
7684
7729
|
const WorkbookUtils = {
|
|
7730
|
+
/**
|
|
7731
|
+
* 加载在线sjs文件
|
|
7732
|
+
* @param spread 工作簿对象
|
|
7733
|
+
* @param fileUrl 在线sjs文件地址
|
|
7734
|
+
* @param succFunc 文件打开成功后的回调函数,返回的第一个参数为spread工作簿对象
|
|
7735
|
+
* @param errorFunc 文件打开失败后的回调函数,返回的第一个参数为错误信息
|
|
7736
|
+
*/
|
|
7737
|
+
loadSjsFile: (spread, fileUrl, succFunc, errorFunc) => __awaiter(void 0, void 0, void 0, function* () {
|
|
7738
|
+
// 获取文件响应结果
|
|
7739
|
+
const response = yield fetch(fileUrl, { method: 'GET' });
|
|
7740
|
+
// 获取成功
|
|
7741
|
+
if (response.ok) {
|
|
7742
|
+
// 文件的字节流对象
|
|
7743
|
+
const blob = yield response.blob();
|
|
7744
|
+
// 将Blob转换为File或Blob对象
|
|
7745
|
+
new File([blob], 'template.sjs', { type: 'application/octet-stream' });
|
|
7746
|
+
const sjsBlob = new Blob([blob], { type: 'application/zip' });
|
|
7747
|
+
// SpreadJS打开文件
|
|
7748
|
+
spread.open(sjsBlob, () => {
|
|
7749
|
+
if (typeof succFunc === 'function') {
|
|
7750
|
+
succFunc(spread);
|
|
7751
|
+
}
|
|
7752
|
+
}, (e) => {
|
|
7753
|
+
if (typeof errorFunc === 'function') {
|
|
7754
|
+
errorFunc(e);
|
|
7755
|
+
}
|
|
7756
|
+
});
|
|
7757
|
+
}
|
|
7758
|
+
}),
|
|
7685
7759
|
/**
|
|
7686
7760
|
* 打印所有工作表
|
|
7687
7761
|
* @param GC GC对象
|
|
@@ -7748,20 +7822,11 @@ const WorkbookUtils = {
|
|
|
7748
7822
|
* @param spread 原始Spread对象
|
|
7749
7823
|
* @param fileName 导出的文件名称,不传则为第一个工作表的名称
|
|
7750
7824
|
*/
|
|
7751
|
-
exportToExcel: (GC, spread, fileName =
|
|
7825
|
+
exportToExcel: (GC, spread, fileName = '') => {
|
|
7752
7826
|
// 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值
|
|
7753
7827
|
const json = spread.toJSON({ includeBindingSource: true });
|
|
7754
7828
|
// 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)
|
|
7755
|
-
const removeCustomFormulas = [
|
|
7756
|
-
"YJMAX",
|
|
7757
|
-
"YJMIN",
|
|
7758
|
-
"YJMID",
|
|
7759
|
-
"YJGETNUM",
|
|
7760
|
-
"YJGETS",
|
|
7761
|
-
"YJGETCV",
|
|
7762
|
-
"YJINTERPOLATIONMETHOD",
|
|
7763
|
-
"YJINTERPOLATIONMETHOD_Y",
|
|
7764
|
-
];
|
|
7829
|
+
const removeCustomFormulas = ['YJMAX', 'YJMIN', 'YJMID', 'YJGETNUM', 'YJGETS', 'YJGETCV', 'YJINTERPOLATIONMETHOD', 'YJINTERPOLATIONMETHOD_Y'];
|
|
7765
7830
|
// 临时工作簿
|
|
7766
7831
|
const tempSpread = new GC.Spread.Sheets.Workbook();
|
|
7767
7832
|
tempSpread.fromJSON(json);
|
|
@@ -7779,9 +7844,7 @@ const WorkbookUtils = {
|
|
|
7779
7844
|
// 获取单元格的公式
|
|
7780
7845
|
const cellFormula = sheet.getFormula(i, j);
|
|
7781
7846
|
// 如果cellFormula不为null或undefined,则说明该单元格引用了公式
|
|
7782
|
-
if (cellFormula != null &&
|
|
7783
|
-
cellFormula != undefined &&
|
|
7784
|
-
removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)) {
|
|
7847
|
+
if (cellFormula != null && cellFormula != undefined && removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)) {
|
|
7785
7848
|
// 获取单元格的值
|
|
7786
7849
|
const cellVal = sheet.getValue(i, j);
|
|
7787
7850
|
// 移除单元格引用的公式
|
|
@@ -7796,7 +7859,7 @@ const WorkbookUtils = {
|
|
|
7796
7859
|
}
|
|
7797
7860
|
// 恢复绘制
|
|
7798
7861
|
tempSpread.resumePaint();
|
|
7799
|
-
if (fileName ==
|
|
7862
|
+
if (fileName == '') {
|
|
7800
7863
|
fileName = tempSpread.getSheet(0).name();
|
|
7801
7864
|
}
|
|
7802
7865
|
let options = {
|