白塗りの xlsx ファイルを rubyXL で作ろうとしたワイ、無を見る
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
成果物
- 本記事のコード https://gist.github.com/cat-in-136/0cf92ed96ee88cf65a3bcba0676986b5
- 本記事の内容の適用例 Shironuri by cat-in-136 · Pull Request #8 · cat-in-136/htot_conv
感想
- はじめて Excel (デスクトップ)、Office.com の Excel (オンライン版)、 LibreOffice Calc で挙動が異なるのを見た
- xlsx ファイルは xml ファイルを zip で固めたものなので意外と融通が利く
- もうちょっとまとめて書いて Qiita あたりに投稿しようと思ったが、 まとまりのない文章に相成ったので essay としてここのブログに書くことにした