MAX()、ROW関数を利用した数式計算が正常に動作しない
対象製品
SpreadJS 9J
発生環境
9.20161.0
状況
修正済み
詳細
MAX()、ROW関数を利用した数式計算が正常に動作しない現象が発生します。
【再現方法】
1.下記の再現コードを実行します
【動作結果】
数式が設定されたセルB2での計算では"8"が期待されますが、本現象では"0"になります。
【再現コード】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.setValue(2,0,1);
sheet.setValue(3,0,2);
sheet.setValue(4,0,3);
sheet.setValue(5,0,4);
sheet.setValue(6,0,'A');
sheet.setValue(7,0,'B');
sheet.setFormula(1,1,'=MAX(INDEX((A:A<>"")*ROW(A:A),))');
};
【再現方法】
1.下記の再現コードを実行します
【動作結果】
数式が設定されたセルB2での計算では"8"が期待されますが、本現象では"0"になります。
【再現コード】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.setValue(2,0,1);
sheet.setValue(3,0,2);
sheet.setValue(4,0,3);
sheet.setValue(5,0,4);
sheet.setValue(6,0,'A');
sheet.setValue(7,0,'B');
sheet.setFormula(1,1,'=MAX(INDEX((A:A<>"")*ROW(A:A),))');
};
回避方法
SpreadJS 9J SP2(Ver.9.20171.0)で修正済み
SpreadJS 9J SP2(Ver.9.20171.0)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
配列数式を利用して、同様の結果を返す数式を設定することで現象の回避が可能です。
【再現コードへの回避方法適用例】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.setValue(2,0,1);
sheet.setValue(3,0,2);
sheet.setValue(4,0,3);
sheet.setValue(5,0,4);
sheet.setValue(6,0,'A');
sheet.setValue(7,0,'B');
//sheet.setFormula(1,1,'=MAX(INDEX((A:A<>"")*ROW(A:A),))');
//回避策 - 配列数式を使用して同様の結果を取得します
sheet.setArrayFormula(1, 1, 1, 1,'MAX((A:A<>"")*ROW(A:A))');
};
SpreadJS 9J SP2(Ver.9.20171.0)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
配列数式を利用して、同様の結果を返す数式を設定することで現象の回避が可能です。
【再現コードへの回避方法適用例】
window.onload = function(){
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.setValue(2,0,1);
sheet.setValue(3,0,2);
sheet.setValue(4,0,3);
sheet.setValue(5,0,4);
sheet.setValue(6,0,'A');
sheet.setValue(7,0,'B');
//sheet.setFormula(1,1,'=MAX(INDEX((A:A<>"")*ROW(A:A),))');
//回避策 - 配列数式を使用して同様の結果を取得します
sheet.setArrayFormula(1, 1, 1, 1,'MAX((A:A<>"")*ROW(A:A))');
};