爱迪生 发表于 2022-12-14 19:10:20

SpreadJS数据量较大情况下全选后"Ctrl+C"复制卡死问题优化方法

本帖最后由 爱迪生 于 2023-1-13 11:07 编辑

我们在SpreadJS中,很多客户保留了在Excel中的操作习惯,比如想全选后复制粘贴整个表单,但是当数据量比较大的情况下,
容易出现浏览器崩溃的情况,基于这样的情景,有如下三个方法我们不妨试一试:


1.如果只是SpreadJS内部的复制,可以将allowCopyPasteExcelStyle设置为false,可以很大的提高复制性能
spread.options.allowCopyPasteExcelStyle = false;2.设置GC.Spread.Sheets.CopyPasteHeaderOptions为noHeaders
spread.options.copyPasteHeaderOptions = GC.Spread.Sheets.CopyPasteHeaderOptions.noHeaders;3.如果我们的客户希望让最终用户避免性能问题,则有一种变通方法,当最终用户复制过多单元格(例如,10000个)时,可以重写复制命令,并且不执行复制操作,或者提示用户数据量过大复制会耗时较长:
var oldExecute = GC.Spread.Sheets.Commands.copy.execute;
GC.Spread.Sheets.Commands.copy.execute = function (context, options) {
    var sheet = context.getSheetFromName(options.sheetName);
    var selections = sheet.getSelections();
    var count = 0;
    for (let range of selections) {
      var rowCount = range.rowCount;
      if (range.row === -1) {
            rowCount = sheet.getRowCount();
      }
      var colCount = range.colCount;
      if (range.col === -1) {
            colCount = sheet.getColumnCount();
      }
      count += rowCount * colCount;
    }
    if (count > 10000) {
      throw new Error("Copy too many cells maybe very slow.")
    }
    return oldExecute(context, options);
};


页: [1]
查看完整版本: SpreadJS数据量较大情况下全选后"Ctrl+C"复制卡死问题优化方法