Gem rubyXL を使用した際に起こったエラーおよび対応について
- POST
Gem rubyXL を使用している際に起こったエラーとその対処方法を備忘録として残しておく
環境 rails: rails 5.2.2 rubyXL: Ver.3.4.0 rubyXL について 拡張子「xlsx」を読み書き可能なライブラリ
使用感としてはテンプレートとなる Excel に対して読み書きする場合には
問題なく使用可能
但し、テンプレートに数式やグラフが含まれている場合に行などを
追加した場合に出力された Excel ファイルが破損して起動不可になる場合が
あるため注意が必要
rubyXL 発生した障害とその対応 テキストの折り返しがsheet.add_cellではできない
sheet.add_cell(col, row, 'text').change_text_wrap によって実装可能
テキストを折り返して表示してくれるようになる
change_contents が使えない
version 3.4.0 以降は convenience_methods を呼び出さないと利用不可
# require が必要なメソッド require 'rubyXL/convenience_methods/cell' require 'rubyXL/convenience_methods/color' require 'rubyXL/convenience_methods/font' require 'rubyXL/convenience_methods/workbook' require 'rubyXL/convenience_methods/worksheet' もしくは以下で全て使用可
require 'rubyXL/convenience_methods' シートのコピーができない
Marshal.load なども試してみたが、上手くいかなかったので以下を参考にして対応
参考サイト
シートコピー後、コピーしたシートを編集したら他のシートの内容も一緒に変わってしまう
change_contents の仕様と上記のシートコピーによって生じた現象
① シートの書式等をコピー ② change_contents で書式設定を保持したまま内容を変更 ③ 該当するコピーシートすべての内容が書き換わる という動作をしている
=> add_cell による値の挿入で対応
※上記の場合は書式設定等は rubyXL 側で行う必要がある 動的な配置で Excel の数式を設定する
insert_row 等で行の挿入を動的に行った場合に Excel の数式によって値の算出を行いたい
※insert_row は公式でも書かれているが扱いに慎重になるべきメソッドで、結合したセルや数式が挿入した行の下にあった場合に Excel が破損することがある