stateメソッドで指定した行列以外のアウトラインも展開・折り畳みが実行される
対象製品
SpreadJS 9J
状況
回避方法あり
詳細
stateメソッドでアウトラインの展開・折り畳みを実行すると、指定していないアウトラインも展開・折り畳みが実行されます。
【再現手順】
1.以下の再現コードを実行します
2.「展開・折り畳み」ボタンをクリックしてアウトラインの展開・折り畳みを実行します
【動作結果】
再現コードではstateメソッドで3列目を対象とするアウトラインを指定していますが、これ以外のアウトラインも展開・折り畳みが実行されます。
【再現コード】
//本コードを実行するHTMLページに以下の設定を保有するボタンを設定してください。
//<input type="button" value="展開・折り畳み" onclick="test();" />
window.onload = function(){
//初期化
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.suspendPaint();
sheet.columnOutlines.group(1, 2);
sheet.columnOutlines.group(4, 2);
sheet.resumePaint();
}
function test() {
'use strict';
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
var sheet = spread.getActiveSheet();
// 3列目のアウトラインを取得し、展開・折り畳みを実行します
var rgi = sheet.columnOutlines.find(2, 0);
if (rgi != null) {
if (sheet.columnOutlines.getState(rgi) === GC.Spread.Sheets.Outlines.OutlineState.collapsed) {
// 折り畳まれている場合、展開します
rgi.state(GC.Spread.Sheets.Outlines.OutlineState.expanded);
} else {
// 展開されている場合、折り畳みます
rgi.state(GC.Spread.Sheets.Outlines.OutlineState.collapsed);
}
sheet.invalidateLayout();
sheet.repaint();
}
}
【再現手順】
1.以下の再現コードを実行します
2.「展開・折り畳み」ボタンをクリックしてアウトラインの展開・折り畳みを実行します
【動作結果】
再現コードではstateメソッドで3列目を対象とするアウトラインを指定していますが、これ以外のアウトラインも展開・折り畳みが実行されます。
【再現コード】
//本コードを実行するHTMLページに以下の設定を保有するボタンを設定してください。
//<input type="button" value="展開・折り畳み" onclick="test();" />
window.onload = function(){
//初期化
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.suspendPaint();
sheet.columnOutlines.group(1, 2);
sheet.columnOutlines.group(4, 2);
sheet.resumePaint();
}
function test() {
'use strict';
var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
var sheet = spread.getActiveSheet();
// 3列目のアウトラインを取得し、展開・折り畳みを実行します
var rgi = sheet.columnOutlines.find(2, 0);
if (rgi != null) {
if (sheet.columnOutlines.getState(rgi) === GC.Spread.Sheets.Outlines.OutlineState.collapsed) {
// 折り畳まれている場合、展開します
rgi.state(GC.Spread.Sheets.Outlines.OutlineState.expanded);
} else {
// 展開されている場合、折り畳みます
rgi.state(GC.Spread.Sheets.Outlines.OutlineState.collapsed);
}
sheet.invalidateLayout();
sheet.repaint();
}
}
回避方法
stateメソッドの代わりにexpandGroupメソッドを使用します。
【再現コードへの回避コード適用例】
// 3列目のアウトラインを取得し、展開・折り畳みを実行します
var rgi = sheet.columnOutlines.find(2, 0);
if (rgi != null) {
if (sheet.columnOutlines.getState(rgi) === GC.Spread.Sheets.Outlines.OutlineState.collapsed) {
// 折り畳まれている場合、展開します
//rgi.state(GC.Spread.Sheets.Outlines.OutlineState.expanded);
// 回避コード expandGroupを使用します
sheet.columnOutlines.expandGroup(rgi, true);
} else {
// 展開されている場合、折り畳みます
//rgi.state(GC.Spread.Sheets.Outlines.OutlineState.collapsed);
// 回避コード expandGroupを使用します
sheet.columnOutlines.expandGroup(rgi, false);
}
sheet.invalidateLayout();
sheet.repaint();
}
【再現コードへの回避コード適用例】
// 3列目のアウトラインを取得し、展開・折り畳みを実行します
var rgi = sheet.columnOutlines.find(2, 0);
if (rgi != null) {
if (sheet.columnOutlines.getState(rgi) === GC.Spread.Sheets.Outlines.OutlineState.collapsed) {
// 折り畳まれている場合、展開します
//rgi.state(GC.Spread.Sheets.Outlines.OutlineState.expanded);
// 回避コード expandGroupを使用します
sheet.columnOutlines.expandGroup(rgi, true);
} else {
// 展開されている場合、折り畳みます
//rgi.state(GC.Spread.Sheets.Outlines.OutlineState.collapsed);
// 回避コード expandGroupを使用します
sheet.columnOutlines.expandGroup(rgi, false);
}
sheet.invalidateLayout();
sheet.repaint();
}