找回密码
 立即注册

QQ登录

只需一步,快速开始

爱迪生

超级版主

53

主题

62

帖子

1283

积分

超级版主

Rank: 8Rank: 8

积分
1283
爱迪生
超级版主   /  发表于:2022-12-14 19:10  /   查看:1239  /  回复:0
本帖最后由 爱迪生 于 2023-1-13 11:07 编辑

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


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



0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部