[英]Using Column headers to parse excel sheets using roo - Ruby
我们可以使用列标题来指定我们使用roo
gem 解析 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
实现这一点吗?
以上的更清洁/更清晰的版本是
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 是一个名为 hash 的局部变量,而不是 class27EF64A92357E1554
您可以将整个 header 行作为一个数组抓取,并在 header 行上抓取整个行键值 hash。
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]
嵌套散列以供以后使用。
这将使用 header 行作为键。 有用的部分是转置和剥离。
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 有效
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.