Rabbit Note

技術的な事柄をメモしていきます.

Excel の取り消し線を反映したテキストを Ruby で取得する方法

方法はいくつかありますが,最も簡単・確実だと思われる方法について紹介します.

背景

Excel ファイルにおいて,内容を削除する意図で取り消し線や斜め罫線を使用することは良くあるかと思います.
例えば次のような感じ.

Excel画面

これらの表記は,人間からすると削除するという意図は伝わってくるのですが,ファイルをプログラムで処理する場合にはちょっと厄介です.そこで,それらの表記を踏まえてセルの内容を取得するスクリプトを作ってみました.

スクリプト

get_norm_text という関数が取り消し線をハンドリングする部分です.

冒頭に掲載した内容の sample.xlsx ファイルに対して上記のスクリプトを実行すると,以下の出力が得られます.BEFORE が普通にセルの値を取得した場合で,AFTER が get_norm_text を使った場合です.後者の場合,取り消し線や斜め罫線が設定された部分が削除されていることが分かるかと思います.

解説

処理のポイントは,Characters によってセルの内容を一文字づつ取得している部分です.これを使うと,文字毎の書式を取得できるため,簡単に取り消し線が設定された文字を削除することができます.

なお,これ以外の方法としては,Value の引数に xlRangeValueXMLSpreadsheet を指定し,セルを内容を XML 形式で取得して処理するやり方が考えられます.しかし,次の点であまりお勧めではありません.

  • XML パーサーが必要
  • セルの書式設定がどのような XML に変換されるのかの仕様が不明

特に 2番目の点に関しては,Excel のバージョンアップ等によって影響を受けることも考えられるため,避けた方が良いですね.

参考文献

Range プロパティ (Excel)
Range オブジェクトのリファレンスです.Excel ファイルを読み書きするスクリプトを書く際は,ここを熟読するのが一番.
Pocket

, ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です