RubyでWebサイト上のエクセルファイルの情報を取得するサンプルコードを作成しました。
1)spreadsheetのGemをインストール
gem install spreadsheet
2)サンプルコード作成
# -*- coding: utf-8 -*- require 'pdf/reader' require 'open-uri' io = open('http://example.com/sample.xls') Spreadsheet.client_encoding = 'UTF-8' book = Spreadsheet.open io sheet1 = book.worksheet 0 ary_rows = [] sheet1.each do |row| for i in 0..17 row[i] = row[i].instance_of?(Spreadsheet::Formula) ? row[i].value : row[i] end ary_rows.push(row[0..17]) end File.open("result.txt","w"){|file| ary_rows.each do |row| row.each do |clm| file.print(clm," ") end file.puts end }
3)サンプルコードの説明
①open-uriを使ってエクセルファイルをオープン。
io = open(‘http://example.com/sample.xls’)
②エンコーディングを指定
Spreadsheet.client_encoding = ‘UTF-8′
③エクセルのワークブックをオープン。
book = Spreadsheet.open io
④ワークシートのインデックスを指定してワークシートにアクセス
sheet1 = book.worksheet 0
⑤シート内の各行に順番にアクセス
sheet1.each do |row|
:
end
⑥セル内の数式
セル内に数式が設定されているとSpreadsheet::Formulaクラスのインスタンスとなります。数式の計算結果を取得する場合は、value属性で取得します。
row[i] = row[i].instance_of?(Spreadsheet::Formula) ? row[i].value : row[i]
⑦ある範囲のセルの値を取得
0から17列までのセルの値を配列に保存する場合の例
ary_rows.push(row[0..17])
⑧抽出結果をファイルに保存
このサンプルでは抽出結果をテキストファイルに保存しています。
File.open(“result.txt”,”w”){|file|
file.puts(result[0][0])
}
※xlsxフォーマットについて
xlsxフォーマットには対応していないようで、下記エラーが発生しました。
`validate!’: OLE2 signature is invalid (Ole::Storage::FormatError)
手動でエクセルファイルをダウンロードし、xlsフォーマットに保存して実行する必要がありそうです。