win32ole で Execlファイルのフォーマット変換2009/08/11

Spreadsheetでどうにもパースできないxlsファイルがあったので、 久し振りにwin32ole経由でExcelを制御しようとしたら、結構忘れていたので自分用メモ

require 'win32ole'

module Excel
end

excel = WIN32OLE.new('Excel.Application')
excel.displayAlerts = false
WIN32OLE.const_load(excel, Excel)

Dir['*.xls'].each do |fn|
  ifn = File.expand_path(fn).gsub('/', '\\')
  ofn = ifn.sub(/xls$/, 'tsv')
  wb = excel.Workbooks.Open(ifn)
  wb.Worksheets(1).Select
  wb.SaveAs(ofn, Excel::XlText)
  wb.Close
end

Workbooks.Openにはフルパスを与える必要があるのと、パスの区切り記号を'\'にするのを忘れないこと。

フォーマット定数はこちら

Ruby のwin32oleで扱うときは、先頭のxを大文字にすること。

TSV(Excelでの表記は"テキスト形式")がリストに無いような気がするけど Excel::XlText(-4158) を指定すると、TSVになる。

Excel::XlUnicodeText(42) は UTF-16のTSVなので扱いに困る。

CSVが良ければ Excel::XlCSV(6) を指定する。

Closeを忘れると60ぐらいで落ちる。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dragonstar.asablo.jp/blog/2009/08/11/4505108/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。