Excel (や互換のスプレッドシート)で背景色を白で塗りつぶすと罫線が消える。 これを個人的に 白塗り と呼んでいる。

白塗りの例

罫線を非表示にする設定をすればいいだけなのだが、 あまり方法が周知されていないため [要出典]、 ブック間をまたいだコピペでも自然に使用できる この白塗りをいまーだ使ってしまっている。

白塗り Excel ファイル (xlsx) を作るにあたり、 簡単のため何もデータを含まないファイルをベースとして考える。 作成したライブラリは rubyXL である。

require "rubyXL"

workbook = RubyXL::Workbook.new
workbook.write("/path/to/blank_nonshironuri.xlsx")
Output file: blank_nonshironuri.xlsx

xlsx ファイルは所詮 xml ファイルを zip で固めたものなので、 Excel(など)で出力した xlsx ファイルを展開して xml ファイルを比較することで どういう風に編集すればいいかがわかる。

確認してみたところ xl\worksheets\sheet1.xml に下記のような col 要素を投入すればよいことが分かった。

<worksheet><!-- worksheet 要素の属性値略 -->
  <!-- 略 -->
  <cols><col min="1" max="16384" style="1"/></cols>
  <sheetData><!-- 略 --></sheetData>
</worksheet>

ここで 16384 というのは、Excel 2007 以降から現在の Excel のバージョンに おける最大列数であり仕様に基づく(それ以前は 256 列)。 つまりすべての列に背景白のスタイルを設定すればよい。

そこで、

require "rubyXL"

workbook = RubyXL::Workbook.new
worksheet = workbook[0]
shironuri_style_index = workbook.modify_fill(nil, "ffffff")
worksheet.cols << RubyXL::ColumnRange.new(
    :min => 1,
    :max => 16384, # 0x4000
    :style_index => shironuri_style_index,
)
workbook.write("/path/to/nil_shironuri.xlsx")
Output file: nil_shironuri.xlsx

とやってみたら、LibreOffice Calc で開けたんだが Excel で開くと 何も表示されない の画面が広がった…。

なお厳密には、下記の通りでオンライン版では開けもしない。

  • デスクトップ版 Excel (Excel Viewer も含む) : の画面
  • オンライン office.com の Excel : そもそも開けない
の画面

とやってみたら、LibreOffice で開けたんだが Excel で開くと 何も表示されない の画面が広がった…。

なお厳密には、下記の通りでオンライン版では開けもしない。

  • デスクトップ版 Excel (Excel Viewer も含む) : の画面
  • オンライン office.com の Excel : そもそも開けない
<worksheet><!-- worksheet 要素の属性値略 -->
  <!-- 略 -->
  <cols><col min="1" max="16384" width="9" style="1"/></cols>
  <sheetData><!-- 略 --></sheetData>
</worksheet>

これを実現するコードとしては…

require "rubyXL"

workbook = RubyXL::Workbook.new
worksheet = workbook[0]
shironuri_style_index = workbook.modify_fill(nil, "ffffff")
worksheet.cols << RubyXL::ColumnRange.new(
    :min => 1,
    :max => 16384, # 0x4000
    :style_index => shironuri_style_index,
    :width => 9, # ** 差分箇所はここ
)
workbook.write("/path/to/blank_shironuri.xlsx")
Output file: blank_shironuri.xlsx

成果物

感想

  • はじめて Excel (デスクトップ)、Office.com の Excel (オンライン版)、 LibreOffice Calc で挙動が異なるのを見た
  • xlsx ファイルは xml ファイルを zip で固めたものなので意外と融通が利く
  • もうちょっとまとめて書いて Qiita あたりに投稿しようと思ったが、 まとまりのない文章に相成ったので essay としてここのブログに書くことにした