stateメソッドで指定した行列以外のアウトラインも展開・折り畳みが実行される

文書番号 : 41331     文書種別 : 不具合     登録日 : 2017/09/14     最終更新日 : 2017/09/14
文書を印刷する
対象製品
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();
  }
}

回避方法
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();
}