VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

RubyでWebサイト上のエクセルファイルの情報を取得

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フォーマットに保存して実行する必要がありそうです。
モバイルバージョンを終了