INDIRECT関数とADDRESS関数と併用すると計算エラーになる
対象製品
SpreadJS 9J
状況
修正済み
詳細
INDIRECT関数の引数にADDRESS関数を設定した場合に、計算に失敗する現象が発生します。
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. A2セルの計算結果がエラーとなります
-ダイアログが崩れた状態で表示されます
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
//下記のコードはHTML上のDOM要素、"#ss"に対し、
//SPREADを展開することを前提としたコードです。
$(function () {
var spreadNS = $.wijmo.wijspread;
var lastActiveSpread = "0";
$(document).ready(function () {
$("#ss").wijspread({ sheetCount: 2 });
var spread = $("#ss").wijspread("spread");
var sheet = spread.getSheet(0);
initSpread(spread);
});
function initSpread(spread) {
var sheet = spread.getSheet(0);
sheet.suspendCalcService(false);
sheet.setRowCount(10);
sheet.setColumnCount(10);
sheet.setColumnWidth(0, 100, spreadNS.SheetArea.rowHeader);
sheet.setColumnHeaderAutoText($.wijmo.wijspread.HeaderAutoText.blank);
sheet.setRowCount(1, $.wijmo.wijspread.SheetArea.colHeader);
sheet.isPaintSuspended(true);
sheet.setValue(0, 0, 1);
sheet.setValue(0, 1, 2);
sheet.setValue(0, 2, 3);
// 計算に失敗し、エラーとなります
var formula = "=SUM(INDIRECT(ADDRESS(1,1)):INDIRECT(ADDRESS(1,5)))"
sheet.setFormula(1, 0, formula);
sheet.setFormula(1, 1, "=SUM(A1:E1)");
sheet.setValue(2, 0, "1行目の値を下に表示する");
sheet.setColumnWidth(0, 200);
sheet.setFormula(3, 0, "=INDIRECT(ADDRESS(1,1))");
sheet.setFormula(3, 1, "=INDIRECT(ADDRESS(1,2))");
sheet.setFormula(3, 2, "=INDIRECT(ADDRESS(1,3))");
sheet.setFormula(3, 3, "=INDIRECT(ADDRESS(1,4))");
sheet.setFormula(3, 4, "=INDIRECT(ADDRESS(1,5))");
sheet.allowUndo(false);
sheet.resumeCalcService(true);
sheet.isPaintSuspended(false);
};
});
--------------------------------------------------
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. A2セルの計算結果がエラーとなります
-ダイアログが崩れた状態で表示されます
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
//下記のコードはHTML上のDOM要素、"#ss"に対し、
//SPREADを展開することを前提としたコードです。
$(function () {
var spreadNS = $.wijmo.wijspread;
var lastActiveSpread = "0";
$(document).ready(function () {
$("#ss").wijspread({ sheetCount: 2 });
var spread = $("#ss").wijspread("spread");
var sheet = spread.getSheet(0);
initSpread(spread);
});
function initSpread(spread) {
var sheet = spread.getSheet(0);
sheet.suspendCalcService(false);
sheet.setRowCount(10);
sheet.setColumnCount(10);
sheet.setColumnWidth(0, 100, spreadNS.SheetArea.rowHeader);
sheet.setColumnHeaderAutoText($.wijmo.wijspread.HeaderAutoText.blank);
sheet.setRowCount(1, $.wijmo.wijspread.SheetArea.colHeader);
sheet.isPaintSuspended(true);
sheet.setValue(0, 0, 1);
sheet.setValue(0, 1, 2);
sheet.setValue(0, 2, 3);
// 計算に失敗し、エラーとなります
var formula = "=SUM(INDIRECT(ADDRESS(1,1)):INDIRECT(ADDRESS(1,5)))"
sheet.setFormula(1, 0, formula);
sheet.setFormula(1, 1, "=SUM(A1:E1)");
sheet.setValue(2, 0, "1行目の値を下に表示する");
sheet.setColumnWidth(0, 200);
sheet.setFormula(3, 0, "=INDIRECT(ADDRESS(1,1))");
sheet.setFormula(3, 1, "=INDIRECT(ADDRESS(1,2))");
sheet.setFormula(3, 2, "=INDIRECT(ADDRESS(1,3))");
sheet.setFormula(3, 3, "=INDIRECT(ADDRESS(1,4))");
sheet.setFormula(3, 4, "=INDIRECT(ADDRESS(1,5))");
sheet.allowUndo(false);
sheet.resumeCalcService(true);
sheet.isPaintSuspended(false);
};
});
--------------------------------------------------
回避方法
SpreadJS 9J SP1(Ver.3.20152.21)で修正済み