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ぐらいで落ちる。
セコメントをする