找回密码
 立即注册

QQ登录

只需一步,快速开始

[处理中] 导入导出问题

Wilson.Zhang
超级版主   /  发表于:4 天前
11#
cmbsjdev 发表于 2024-10-25 14:59
这样修改以后,相较于其他的选一个的,在1w行的数据情况下,会有一个延时显示的效果,延时了5s左右,有点 ...

首先,不这样处理的话导入后无法复原,因此,还得保留这样的处理方式。
其次,如果在数据量较多的情况下存在延时显示的现象,可以尝试在复原前后的代码处用暂停绘制和恢复绘制代码包围。如下代码所示:
  1. sheet.getRange(0, 1, sheet.getRowCount(), 1).cellType(radio);
  2.             sheet.suspendPaint();
  3.             for(var i=0;i<sheet.getRowCount();i++){
  4.     var value = sheet.getValue(i,1);
  5.     if(value && typeof value === 'string' && value.split(',').length > 1){
  6.         sheet.setValue(i,1,value.split(','));
  7.     }
  8.             }
  9.             sheet.resumePaint();
  10.             sheet.autoFitColumn(1);
复制代码




回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:4 天前
12#
Wilson.Zhang 发表于 2024-10-25 15:39
首先,不这样处理的话导入后无法复原,因此,还得保留这样的处理方式。
其次,如果在数据量较多的情况下 ...

这个加过了,因为外层还有一个forEach,是在forEach前后加的
回复 使用道具 举报
cmbsjdev
金牌服务用户   /  发表于:4 天前
13#
Wilson.Zhang 发表于 2024-10-25 15:39
首先,不这样处理的话导入后无法复原,因此,还得保留这样的处理方式。
其次,如果在数据量较多的情况下 ...

函数代码如下:看看有没有优化空间
  1. checkBoxUpload() {
  2.       const spread = this.designer.getWorkbook();
  3.       queryHeadConfig({
  4.         taskId: this.params.taskId,
  5.       }).then((res) => {
  6.         if (!res.data.length) {
  7.           return;
  8.         }
  9.         spread.suspendPaint();
  10.         res.data.forEach((item) => {
  11.           const sheet = spread.getSheetFromName(item.sheetName);
  12.           // 添加多选框
  13.           if (!sheet) {
  14.             return;
  15.           }
  16.           const range = sheet.getRange(
  17.             `${item.columnLocate}${item.headerRows + 1}:${item.columnLocate}${sheet.getRowCount()}`,
  18.           );
  19.           if (item.columnType === 'CHECKBOX' && item.checkboxList.length) {
  20.             // 添加多选项
  21.             const radio = new GC.Spread.Sheets.CellTypes.CheckBoxList();
  22.             radio.items(
  23.               item.checkboxList.map((checkItem) => {
  24.                 return {
  25.                   text: checkItem,
  26.                   value: checkItem,
  27.                 };
  28.               }),
  29.             );
  30.             range.cellType(radio);
  31.             for (let i = item.headerRows + 1; i < sheet.getRowCount(); i++) {
  32.               const value = sheet.getValue(i, item.columnIndex);
  33.               if (value && typeof value === 'string' && value.split(',').length > 1) {
  34.                 console.log(value);
  35.                 sheet.setValue(i, item.columnIndex, value.split(','));
  36.               }
  37.             }
  38.             // 列宽自适应
  39.             sheet.autoFitColumn(range.col);
  40.           }
  41.           if (item.columnType === 'FILE_UPLOAD') {
  42.             // 添加上传文件入口
  43.             const style2 = new GC.Spread.Sheets.Style();
  44.             style2.vAlign = GC.Spread.Sheets.VerticalAlign.center;
  45.             style2.hAlign = GC.Spread.Sheets.HorizontalAlign.center;
  46.             range.setStyle(style2);

  47.             const fileUpload = new GC.Spread.Sheets.CellTypes.FileUpload();
  48.             fileUpload.accept('.xlsx');
  49.             fileUpload.maxSize(item.maxFileSize * 1024);
  50.             fileUpload.valuePath('dataUrl');
  51.             range.cellType(fileUpload);
  52.             sheet.setColumnWidth(range.col, 200);
  53.             const rowCount = sheet.getRowCount();
  54.             for (let i = item.headerRows + 1; i < rowCount; i++) {
  55.               sheet.setRowHeight(i, 70);
  56.             }
  57.           }
  58.         });
  59.         spread.resumePaint();
  60.       });
  61.     },
复制代码


回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:4 天前
14#
cmbsjdev 发表于 2024-10-25 15:44
函数代码如下:看看有没有优化空间

从您提供的代码中,了解到存在异步响应调用,这里是否存在网络访问?您可以排查下。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部