セル値が変更されていなくてもダーティ状態となる

文書番号 : 39476     文書種別 : 不具合     登録日 : 2016/07/27     最終更新日 : 2016/07/27
文書を印刷する
対象製品
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);
     }
    }
  });
});
--------------------------------------------------
回避方法
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>