作成日: 2025/01/27 最終更新日: 2025/01/27
文書種別
制限事項
詳細
列数が異なるタブ区切りの文字列をコピーしてペーストするとSpreadJSとExcelで結果が異なります。
例えば、以下のペーストデータをコピーしてテキストエディタにペーストし、図1の状態のSpreadJSとExcelのA1セルにペーストすると、SpreadJSはC1セルの元の値が残りますが、ExcelではC1セルは空白がペーストされます。
【ペーストデータ】
0.1 0.2 0.5 0.6
【図1】
【SpreadJSのペースト結果】
【Excelのペースト結果】
Excelでは最大列数に合わせてデータを置き換えますが、SpreadJSでは各行の最大列数までデータしかペーストされず元のデータが残ります。上記のケースではExcelでは3列分のデータと判断されC1セルの値が空白になりますが、SpreadJSでは1行目が2列、2行目が3列のデータと判断されるため、C1セルの値が残っています。
回避方法
以下のコードを追加して、他の行の列数に合わせて空白データをnullで埋めて、すべての行の列数を揃えることで、Excelと同じ結果になります。
var oldSetCsvFn = GC.Spread.Sheets.Worksheet.prototype.setCsv;
GC.Spread.Sheets.Worksheet.prototype.setCsv = function (row, col, text) {
const convertArray = text.split("\r\n").map(item => item.split("\t"));
const maxLength = Math.max(...convertArray.map(item => item.length));
const paddedArray = convertArray.map(item => {
return item.concat(new Array(maxLength - item.length).fill(null));
});
text = paddedArray.map(item => item.join("\t")).join("\r\n");
oldSetCsvFn.apply(this, arguments);
};