改行を含むセルのコピーペーストが1件しか有効にならない
対象製品
SpreadJS 9J
状況
修正済み
詳細
改行を含むセルをコピーし、複数のセルにペーストしても、1件しか有効にならない現象が発生します。
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. セルA1をCtrl+C操作でコピーします
3. 複数のセルを選択し、Ctrl+V操作で貼り付けます
-選択範囲の先頭のみ、貼り付けが有効になる現象が発生します
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(0).wordWrap(true);
sheet.getCell(0,0).value("ABC¥r¥nEFG");
});
--------------------------------------------------
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. セルA1をCtrl+C操作でコピーします
3. 複数のセルを選択し、Ctrl+V操作で貼り付けます
-選択範囲の先頭のみ、貼り付けが有効になる現象が発生します
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(0).wordWrap(true);
sheet.getCell(0,0).value("ABC¥r¥nEFG");
});
--------------------------------------------------
回避方法
SpreadJS 9J SP1(Ver.3.20152.21)で修正済み
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
getTextメソッドおよび_formatClipboardDataメソッドをオーバーライドし、下記のような処理を行うことで現象の回避が可能です。
<script type="text/javascript">
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(0).wordWrap(true);
sheet.getCell(0,0).value("ABC¥r¥nEFG");
sheet.rowFilter(new $.wijmo.wijspread.HideRowFilter(new $.wijmo.wijspread.Range(-1, -1, -1, -1)));
});
// getTextメソッドをオーバーライド
var oldGetText = $.wijmo.wijspread.Sheet.prototype.getText;
$.wijmo.wijspread.Sheet.prototype.getText = function (row, col, sheetArea) {
var result = oldGetText.apply(this, arguments);
if (typeof (result) === "string") {
result = result.replace(/¥r¥n?/g, "¥n");
}
return result;
}
// _formatClipboardDataメソッドをオーバーライド
$.wijmo.wijspread._SheetEventHandler.prototype._formatClipboardData = function (data) {
var sbr = [];
if (data) {
var cellDelimiter = "¥"";
var inCell = false;
for (var i = 0; i < data.length; i++) {
var tempChar = data[i];
if (tempChar === cellDelimiter) {
inCell = !inCell;
sbr.push(cellDelimiter);
}
else if (!inCell && tempChar === "¥n") {
sbr.push("¥r¥n");
}
else {
sbr.push(tempChar);
}
}
return sbr.join('');
}
return "";
};
</script>
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
getTextメソッドおよび_formatClipboardDataメソッドをオーバーライドし、下記のような処理を行うことで現象の回避が可能です。
<script type="text/javascript">
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(0).wordWrap(true);
sheet.getCell(0,0).value("ABC¥r¥nEFG");
sheet.rowFilter(new $.wijmo.wijspread.HideRowFilter(new $.wijmo.wijspread.Range(-1, -1, -1, -1)));
});
// getTextメソッドをオーバーライド
var oldGetText = $.wijmo.wijspread.Sheet.prototype.getText;
$.wijmo.wijspread.Sheet.prototype.getText = function (row, col, sheetArea) {
var result = oldGetText.apply(this, arguments);
if (typeof (result) === "string") {
result = result.replace(/¥r¥n?/g, "¥n");
}
return result;
}
// _formatClipboardDataメソッドをオーバーライド
$.wijmo.wijspread._SheetEventHandler.prototype._formatClipboardData = function (data) {
var sbr = [];
if (data) {
var cellDelimiter = "¥"";
var inCell = false;
for (var i = 0; i < data.length; i++) {
var tempChar = data[i];
if (tempChar === cellDelimiter) {
inCell = !inCell;
sbr.push(cellDelimiter);
}
else if (!inCell && tempChar === "¥n") {
sbr.push("¥r¥n");
}
else {
sbr.push(tempChar);
}
}
return sbr.join('');
}
return "";
};
</script>