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]