改行を含むセルのコピーペーストが1件しか有効にならない

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

--------------------------------------------------
回避方法
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>