6

列ヘッダーを使用して、roogemを使用してExcelシートを解析する列番号を指定できますか?私の現在のコードは次のようになっています。

oo = Openoffice.new("simple_spreadsheet.ods")
oo.default_sheet = oo.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か?

4

3 に答える 3

3

ヘッダー行全体を配列として取得し、ヘッダー行でキー化された行全体をハッシュできます。

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

row_data[line]後で使用するためにハッシュをネストするために使用することもできます。

于 2011-07-22T15:11:16.387 に答える
3

上記のよりクリーン/クリアなバージョンは

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

特に、ハッシュはクラス Hash ではなくハッシュという名前のローカル変数だと思っていたので、オリジナルを理解するのに少し時間がかかりました

于 2012-04-13T19:37:13.833 に答える
1

これは、ヘッダー行をキーとして使用します。役立つ部分は転置とストリップです。

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

Roo gem 1.10.2 まで有効

于 2013-07-23T07:00:23.080 に答える