2011-07-20 7 views
2

roo gemを使用してExcelシートを解析する列番号を列ヘッダーで指定できますか?私の現在のコードは次のようである:列ヘッダーを使用してルーを使ってExcelシートを解析する - Ruby

oo = Openoffice.new("simple_spreadsheet.ods") 
oo.default_sheet = file.sheets.first 
(2..oo.last_row).each do |line| 
    date  = oo.cell(line,'A') 
    start_time = oo.cell(line,'B') 
    end_time = oo.cell(line,'C') 
    pause  = oo.cell(line,'D') 
    ... 
end 

私が代わりに'A' 'B' 'C' ..としてカラムを指定する列ヘッダーから解析したいと思います。 Rooを使用してこれを達成できますか?

+0

を通じて有効

def self.excel_to_hash(folder_name, file_name, tab_name) # Takes an excel file name and a tab name, and returns an array of stripped, transposed rows # Sample call: my_data = excel_to_hash File.join(Rails.root,'db/data/data_to_import.xlsx'), 'models' rows = [] file = File.open(File.join(folder_name, file_name), mode = 'r') excel = Excelx.new(file.path, nil, :ignore) excel.default_sheet = excel.sheets.index(tab_name) + 1 header = excel.row(1) (2..excel.last_row).each do |i| next unless excel.row(i)[0] row = Hash[[header, excel.row(i)].transpose] row.each_key{|x| row[x] = row[x].to_s.strip if row[x]} rows << row end return rows end 

私は数字だけやアルファベットがセルにアクセスするために使用することができます知っています。 – Anatoly

+3

[rooのウェブサイト](http://roo.rubyforge.org/)が私の目をそんなに憎むのはなぜですか? –

+0

@muが短すぎる..ちょっと...右よかった..結構色々ありました:P – rubyprince

答えて

2

ヘッダー行全体を配列として取得し、ヘッダー行の行キー全体をハッシュすることができます。

oo = Openoffice.new("simple_spreadsheet.ods") 
oo.default_sheet = file.sheets.first 
header = oo.first_row 
2.upto(oo.last_row) do |line| 
    row_data = Hash[header.zip oo.row[line]] 
    ... 
end 

また巣に後で使用するためにハッシュをrow_data[line]を使用することができます。

+0

xlsxとxlsファイルにrooを使って書き込む方法を教えてください –

+0

あなたは現時点では、 Excel用。 axlsx gemを使って書くことができます。私は知っています - それは理想的ではありませんが、今のところ私はカントを見つけることができません。 – konung

2

上記のクリーナー/明確なバージョンは、私は、ハッシュがハッシュの代わりに、クラスのハッシュ

1

この名前のローカル変数だと思った、特にとしてので、オリジナルを理解するために私を少し取っ

oo = Openoffice.new("simple_spreadsheet.ods") 
oo.default_sheet = file.sheets.first 
header = oo.first_row 
2.upto(oo.last_row) do |line| 
    row_data = Hash[*header.zip(row).flatten] 
    ... 
end 

ですヘッダー行をキーとして使用します。便利な部分は、トランスポーズとストリップです。 Rooの宝石1.10.2

+0

共有いただきありがとうございます。 – scarver2

関連する問題