トップ «前の日記(2010-02-09) 最新 次の日記(2010-02-16)» 編集

2010-02-15 [長年日記]

_ Excelで作った表のHTMLに特化したcleaner書いた

と言っても Ruby + Hpricot でわずか 30行という手抜きですが。

インストール

(gem sources -a http://gemcutter.org/)
gem install xls_html_cleaner

依存で Hpricot を要求します。

何がしたかったか

他の人の作った Excel のちょっとした大きさの表を HTML にしたかったのですが、

  1. Excel で作った HTML があまりにすごかったのでそのままでは使えなかった
  2. 手元の Dreamweaver 8 には HTM のクリーンアップ、Word HTML のクリーンアップという機能があったが役に立たなかった
  3. みんな大好き htmltidy に修正してもらおうと思ったけど役に立たなかった
  4. Hpricot で table 構造以外全部捨てればいんじゃね?

という流れ。

機能

  1. table 関連のタグ以外は全部カット
    • 内容は残るので、table 以外を多く含む HTML に対してこのツールを適用すると意味が分からなくなる
  2. あらゆる属性も片っ端からカット
    • width の指定とかどうせ CSS でやり直すので

使い方

標準入力から読んだ HTML をそのまま標準出力に吐くだけです。オプションとか一切なし。

frame を使った複数シートの HTML は一つずつ与えないと処理できません。簡単なテストしかしてないので、セルのプロパティが複雑なときにどうなるのかよく分からないです。まぁいったん Excel 上で標準の書式にするとか工夫すればいいんだし、そんなに気張る必要もないかなーとか考えてます。

似たような、あるいはもっと高機能なツールがとっくにあると思うんだけど、なんかもう探すの面倒になっちゃって。自分の見つけられる範囲に置いとくことにしました。作りっぱなしにしちゃうと必要になったときにまた見つからないんだよね、こういうの。

余談Hpricot::swapの話

Hpricot なり Nokogiri なりで HTML の書き換えができるんだけど、つかんでおかないとハマるポイントがあるなと思った話。

例によって Twitter のログから。

2009.10.28:15:56:12 >wtnabe< きた。swap だった。Hpricot::Elem#swap,
Nokogiri::XML::Node#swap
2009.10.28:17:25:10 >wtnabe< 今日の不覚は Hpricot や Nokogiri にある
replace を絶対視して swap を見落としていたこと。
2009.12.09:19:39:30 >wtnabe< Hpricot の場合、要素や属性をいじるメソッ
ドは当然破壊的であるということで map を使わずに each でぐりぐり処理す
ることと、Hpricot::Elem#attributes は to_hash すべしってことを覚えてお
くと幸せ。
Tags: HTML Ruby