セル値が変更されていなくてもダーティ状態となる
対象製品
SpreadJS 9J
状況
修正済み
詳細
改行を含むセルで編集を開始し、値を変えずに編集終了するとダーティ状態になってしまう現象が発生します。
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. 第3列のセルをダブルクリックし、編集開始します
3. セルの値を変えずに編集を終了します
4. "Check dirty cells"ボタンでダーティ状態を確認します
- Sheet.getDirtyCells()が手順2のセルをダーティであると判断する現象が発生します
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
// 下記コードの実行にあたってはSpreadJSのほか、
// HTMLマークアップでボタン、debugButtonを用意してください。
// 定義例 <button id="debugButton">Check dirty cells</button>
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(2).wordWrap(true);
var customers = [
{ ID: 0, Name: 'A', Info1: 'Info0¥r¥nCRLF' },
{ ID: 1, Name: 'B', Info1: 'Info1¥rLF' },
{ ID: 2, Name: 'C', Info1: 'Info2¥rCR' },
];
sheet.autoGenerateColumns = true;
sheet.setDataSource(customers);
$("#debugButton").click(function() {
var dirtyCells = sheet.getDirtyCells();
var len = dirtyCells.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var cell = dirtyCells[i];
alert("row:" + cell.row + " " + "col:" + cell.col + " " + "oldValue:" + cell.oldValue + " " + "newValue:" + cell.newValue);
}
}
});
});
--------------------------------------------------
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. 第3列のセルをダブルクリックし、編集開始します
3. セルの値を変えずに編集を終了します
4. "Check dirty cells"ボタンでダーティ状態を確認します
- Sheet.getDirtyCells()が手順2のセルをダーティであると判断する現象が発生します
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
// 下記コードの実行にあたってはSpreadJSのほか、
// HTMLマークアップでボタン、debugButtonを用意してください。
// 定義例 <button id="debugButton">Check dirty cells</button>
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(2).wordWrap(true);
var customers = [
{ ID: 0, Name: 'A', Info1: 'Info0¥r¥nCRLF' },
{ ID: 1, Name: 'B', Info1: 'Info1¥rLF' },
{ ID: 2, Name: 'C', Info1: 'Info2¥rCR' },
];
sheet.autoGenerateColumns = true;
sheet.setDataSource(customers);
$("#debugButton").click(function() {
var dirtyCells = sheet.getDirtyCells();
var len = dirtyCells.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var cell = dirtyCells[i];
alert("row:" + cell.row + " " + "col:" + cell.col + " " + "oldValue:" + cell.oldValue + " " + "newValue:" + cell.newValue);
}
}
});
});
--------------------------------------------------
回避方法
SpreadJS 9J SP1(Ver.3.20152.21)で修正済み
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
getTextメソッドをオーバーライドし、下記のような処理を行うことで現象の回避が可能です。
<script type="text/javascript">
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(2).wordWrap(true);
var customers = [
{ ID: 0, Name: 'A', Info1: 'Info0¥r¥nCRLF' },
{ ID: 1, Name: 'B', Info1: 'Info1¥rLF' },
{ ID: 2, Name: 'C', Info1: 'Info2¥rCR' },
];
sheet.autoGenerateColumns = true;
sheet.setDataSource(customers);
$("#debugButton").click(function() {
var dirtyCells = sheet.getDirtyCells();
var len = dirtyCells.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var cell = dirtyCells[i];
alert("row:" + cell.row + " " + "col:" + cell.col + " " + "oldValue:" + cell.oldValue + " " + "newValue:" + cell.newValue);
}
}
});
});
// 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;
}
</script>
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
getTextメソッドをオーバーライドし、下記のような処理を行うことで現象の回避が可能です。
<script type="text/javascript">
$(document).ready(function () {
$("#ss").wijspread();
var spread = $("#ss").wijspread("spread");
var sheet = spread.getActiveSheet();
sheet.defaults.rowHeight = 50;
sheet.getColumn(2).wordWrap(true);
var customers = [
{ ID: 0, Name: 'A', Info1: 'Info0¥r¥nCRLF' },
{ ID: 1, Name: 'B', Info1: 'Info1¥rLF' },
{ ID: 2, Name: 'C', Info1: 'Info2¥rCR' },
];
sheet.autoGenerateColumns = true;
sheet.setDataSource(customers);
$("#debugButton").click(function() {
var dirtyCells = sheet.getDirtyCells();
var len = dirtyCells.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var cell = dirtyCells[i];
alert("row:" + cell.row + " " + "col:" + cell.col + " " + "oldValue:" + cell.oldValue + " " + "newValue:" + cell.newValue);
}
}
});
});
// 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;
}
</script>