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フォーマットに保存して実行する必要がありそうです。 関連記事の目次
- CentOSにcurb(ruby)をインストールする手順
- Windows7にcurb(ruby)をインストールする手順
- Windows7の環境でRubyでMySQLに接続する手順
- Ruby curbでリファラーとユーザーエージェントを設定してWebページを取得
- Windows7でruby2、open-uriを使ってWebページを取得
- Ruby open-uriでリファラーとユーザーエージェントを設定してWebページを取得
- Ruby curb、scan、gsubを使ってWebページから特定の情報を抽出
- RubyでWebサイト上のPDFファイルの情報を取得
- RubyでWebサイト上のエクセルファイルの情報を取得
- Rubyで既存のエクセルファイルにデータを追加
- RubyでWebページの応答時間を計測し、メールで通知
- Ruby curbでPOSTデータ送信
- curbでRailsアプリのクッキー、セッションIDを取得し、ログイン
- Ruby mysql2でSQLインジェクション対策
- Ruby mysql2でデータをテーブルに登録