作成日: 2023/06/15 最終更新日: 2023/06/15
文書種別
制限事項
詳細
大量のデータを設定したSpreadJSで、Excel出力を繰り返すとエラーが発生する場合があります。
この現象はPCのメモリとOSスペック、ブラウザのメモリに起因して発生するため、確実な発生条件を明記することはできませんが、弊社では以下の環境・条件での現象発生を確認しています。
発生環境:
・OS:Windows 11 Pro 64bit
・CPU:Intel(R) Core(TM) i7-1255U
・メモリ:16.0 GB
・ブラウザ:Chrome/Edge
発生条件:
1. ワークシートに大量なデータを設定します。
行:10000
列:300~500
2. Excelファイルにエクスポートする処理を6回以上に繰り返します。(Chromeの場合は6回以上、Edgeの場合は10回以上)
回避方法
・sheets.ioモジュールを使用してExcelファイルを出力する場合
エクスポート用のワークブックインスタンスを作成し、出力後にdestroyメソッドを使用してインスタンスを破棄してください。
【サンプルコード】
var fileName = "sheetsioTest.xlsx";
// 出力用のワークブックを生成
let tempWorkbook = new GC.Spread.Sheets.Workbook();
// 出力する情報をコピー
tempWorkbook.getSheet(0).fromJSON(spread.getSheet(0).toJSON());
tempWorkbook.export(function (blob) {
saveAs(blob, fileName);
// インスタンスを破棄する
tempWorkbook.destroy();
}, function (e) {
console.log(e);
}, {
fileType: GC.Spread.Sheets.FileType.excel,
includeBindingSource: true
});
・excelIoモジュールを使用する場合
Excelファイルの出力中やダウンロード中に、再度Excel出力処理が実行されないよう制御してください。
【サンプルコード】
document.getElementById('ExcelIO').onclick = function (sender) {
// ボタン押下で処理を実行する場合、ボタンを非活性にする
sender.target.setAttribute("disabled", true);
var fileName = "ExcelIOTest.xlsx";
let tempWorkbook = new GC.Spread.Sheets.Workbook();
let excelIo = new GC.Spread.Excel.IO();
tempWorkbook.getSheet(0).fromJSON(spread.getSheet(0).toJSON());
var json = tempWorkbook.toJSON();
excelIo.save(json, function (blob) {
saveAs(blob, fileName);
tempWorkbook.destroy();
json = undefined;
// 処理完了後、ボタンを活性にする
sender.target.removeAttribute("disabled");
}, function (e) {
console.log(e);
},);
};