recalcAll(true)を実行すると、TRANSPOSE関数の参照範囲が不正に変更される

文書番号 : 84754     文書種別 : 不具合     登録日 : 2019/12/19     最終更新日 : 2020/01/22
文書を印刷する
対象製品
SpreadJS(Ver.10.x.x -)
状況
修正済み
詳細
recalcAllメソッドの引数にtrueを指定して再計算を実行した場合、TRANSPOSE関数で参照しているセル範囲が不正に変更されます。

再現手順
1.Spreadとボタンを配置したHTMLファイルを用意する
2.1.のファイルに下記のサンプルコードを追加する
★サンプルコード(JavaScript)
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.sheets[0];
sheet.setValue(4, 1, 1);
sheet.setValue(5, 1, 2);
sheet.setValue(6, 1, 3);
sheet.setValue(7, 1, 4);
sheet.setValue(8, 1, 5);
sheet.setArrayFormula(4, 3, 1, 5, "TRANSPOSE(B5:B10)");

document.getElementById("button").onclick = function () {
  sheet.recalcAll(true);
}

3. ボタンを押下して、再計算を実行する
→下記のようにTRANSPOSE関数の参照範囲が不正に変更されてしまいます
再計算実行前:TRANSPOSE(B5:B10)
再計算実行後:TRANSPOSE(L5:L10)
回避方法
SpreadJS (Ver.13.0.4)で修正済み

Ver.13.0.4より前のバージョンでは次の方法で回避可能です。

以下の2つの方法のいずれかで回避することが可能です。

回避方法1. 引数を指定せずにrecalAllメソッドを実行する
★サンプルコード(JavaScript)
//sheet.recalcAll(true);
//引数を指定しない
sheet.recalcAll();


回避方法2. TRANSPOSE関数のセル参照を絶対参照で指定する
★サンプルコード(JavaScript)
//sheet.setArrayFormula(4, 3, 1, 5, "TRANSPOSE(B5:B10)");
//TRANSPOSE関数のセル参照を絶対参照で指定する
sheet.setArrayFormula(4, 3, 1, 5, "TRANSPOSE($B$5:$B$10)");