印刷時、罫線なしの箇所に罫線が表示される

文書番号 : 41345     文書種別 : 不具合     登録日 : 2017/09/26     最終更新日 : 2017/09/26
文書を印刷する
対象製品
SpreadJS 9J
発生環境
9.20171.0
状況
回避方法あり
詳細
シート上に空の罫線を設定し印刷を実行すると、罫線なしの箇所に罫線が表示される現象が発生します。

【再現手順】
1.以下の再現コードを実行します
2.「印刷」ボタンを押下します

【動作結果】
SpreadJS上では罫線なしとして表示されていたセルが罫線ありのセルとして印刷されます。

【再現コード】
//本コードを実行するHTMLページに以下の設定を保有するボタンを設定してください。
//<input type="button" value="印刷" onclick="printSpread();" />
window.onload = function() {
   var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {sheetCount: 1});
   var sheet = spread.getActiveSheet();
   spread.suspendPaint();
   for (var i = 0; i < 3; i++) {
     for (var j = 0; j < 3; j++) {
       sheet.setValue(i, j, i * j);
     }
   }
   sheet.setValue(4, 4, "Test");
   var defaultBorder = new GC.Spread.Sheets.LineBorder("#000000", GC.Spread.Sheets.LineStyle.dashDot);
   var defaultStyle = new GC.Spread.Sheets.Style();
   defaultStyle.borderLeft = defaultBorder;
   defaultStyle.borderRight = defaultBorder;
   defaultStyle.borderTop = defaultBorder;
   defaultStyle.borderBottom = defaultBorder;
   sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);

   // セルに空の罫線を設定します
   var emptyBorder = new GC.Spread.Sheets.LineBorder();
   emptyBorder.style = GC.Spread.Sheets.LineStyle.empty;
   sheet.getRange(0, 0, 3, 3).borderLeft(emptyBorder);
   sheet.getRange(0, 0, 3, 3).borderRight(emptyBorder);
   sheet.getRange(0, 0, 3, 3).borderTop(emptyBorder);
   sheet.getRange(0, 0, 3, 3).borderBottom(emptyBorder);
   spread.resumePaint();
};

function printSpread() {
  var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'));
  spread.print();
}

回避方法
空の罫線の代わりにnullを設定することで現象の回避が可能です。

【現象再現コードへの回避コード適用例】
上記の再現コードを以下のように変更します

// セルに空の罫線を設定します
var emptyBorder = new GC.Spread.Sheets.LineBorder();
emptyBorder.style = GC.Spread.Sheets.LineStyle.empty;
// sheet.getRange(0, 0, 3, 3).borderLeft(emptyBorder);
// sheet.getRange(0, 0, 3, 3).borderRight(emptyBorder);
// sheet.getRange(0, 0, 3, 3).borderTop(emptyBorder);
// sheet.getRange(0, 0, 3, 3).borderBottom(emptyBorder);

// 【回避方法】空の罫線の代わりにnullを設定します

sheet.getRange(0, 0, 3, 3).borderLeft(null);
sheet.getRange(0, 0, 3, 3).borderRight(null);
sheet.getRange(0, 0, 3, 3).borderTop(null);
sheet.getRange(0, 0, 3, 3).borderBottom(null);

spread.resumePaint();