Ruby on rails 将读取解析脚本从.csv更改为.xls

Ruby on rails 将读取解析脚本从.csv更改为.xls,ruby-on-rails,csv,xls,Ruby On Rails,Csv,Xls,我有一个解析csv文件的现有脚本。。。但我的来源现在已经开始发送xls文件 关于更改此脚本以解析xls文件的任何建议 def parse_csv(filename) lines = CSV.read(filename) header = lines.shift raise EdiLoadsFileEmpty if header.nil? posts = [] lines.each do |line| post = Hash[header.zip line] p

我有一个解析csv文件的现有脚本。。。但我的来源现在已经开始发送xls文件

关于更改此脚本以解析xls文件的任何建议

def parse_csv(filename)
  lines = CSV.read(filename)
  header = lines.shift
  raise EdiLoadsFileEmpty if header.nil?
  posts = []
  lines.each do |line|
    post = Hash[header.zip line]
    posts.push post
  end
  posts
end
这就是我现在拥有的史蒂夫

def parse_csv(文件名) 工作簿=Roo::Excel.new(文件名) 工作簿.default_sheet=工作簿.sheets[0] 页眉=工作簿。行(1) 如果header.nil为空,是否引发EdiLoadsFileEmpty? 放头球 职位=[] (2.工作簿。最后一行)。每一行| post=Hash[header.zip(workbook.row(i))]
postsroo gem打开Excel、Excelx、Google电子表格、OpenOffice和CSV

if File.extname(filename) == "xls"
  workbook = Roo::Excel.new(filename)  
else
  workbook = Roo::CSV.new(filename)
end
workbook.default_sheet = workbook.sheets[0]
然后使用
workbook.row
方法处理每一行

((workbook.first_row + 1)..workbook.last_row).each do |lines|
...
end
编辑我记得每个
和roo gem都有一个问题。。。试试这个

(2..workbook.last_row).each do |i|
  post = Hash[header.zip(workbook.row(i))]
  posts << post
end
(2..工作簿。最后一行)。每个都要|
post=Hash[header.zip(workbook.row(i))]

那么我还能像以前一样抓取块中的页眉吗?是的,你不能移动我不认为(至少我从未尝试过),但它将是工作簿。第(1)行,所以只需执行
header=workbook.row(1)
然后您只需遍历第2行到工作簿。最后一行
。名称错误:未定义的局部变量或EdiLoads的方法“i”:Classdarn darn。。。将第一次出现的
i
更改为
|i |
(请参阅我编辑的答案)对此表示抱歉。再次更新了我的帖子。。。现在它通过了。。。但不解析任何数据