加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在ruby中有效地将Excel转换为CSV

发布时间:2020-12-16 19:09:48 所属栏目:百科 来源:网络整理
导读:我使用 spreadsheet gem来做到这一点.它有效,但有时可能非常慢.我甚至尝试过 Roo gem,但这并没有改善性能.有没有更好的方法来完成这项工作?奇怪的是,同一个excel中的一些工作表工作得更快,一些工作表工作得非常慢,甚至需要长达1小时. 我们可以使用开放式办
我使用 spreadsheet gem来做到这一点.它有效,但有时可能非常慢.我甚至尝试过 Roo gem,但这并没有改善性能.有没有更好的方法来完成这项工作?奇怪的是,同一个excel中的一些工作表工作得更快,一些工作表工作得非常慢,甚至需要长达1小时.

我们可以使用开放式办公室在单个Excel中打开每个工作表(选项卡)并将它们更快地转换为csv吗?如果是的话,我将如何在ruby中做到这一点?

或者是否有更好的解决方案?

只是添加一个我尝试使用Roo gem的小例子

xls = Roo::Excel.new(source_excel_file)
xls.each_with_pagename do |name,sheet|
  # p sheet.to_csv(File.join(dest_csv_dir,name + ".csv"))
  #sheet.parse(:clean => true)#.to_csv(File.join(dest_csv_dir,name + ".csv"))
  puts name
  puts sheet.parse(:clean => true)
end

解决方法

懦弱的前言:我对ruby很陌生,对滚道几乎一无所知,但我之前曾与Excel纠缠在一起.我在本地机器上创建了一个虚拟工作簿,有5张,每张包含10列和1000行随机生成的数字.我将每张表格转换为自己的CSV格式:
require 'win32ole'
require 'csv'

# configure a workbook,turn off excel alarms
xl = WIN32OLE.new('excel.application')
book = xl.workbooks.open('C:stackmy_workbook.xlsx')
xl.displayalerts = false

# loop through all worksheets in the excel file
book.worksheets.each do |sheet|
  last_row = sheet.cells.find(what: '*',searchorder: 1,searchdirection: 2).row
  last_col = sheet.cells.find(what: '*',searchorder: 2,searchdirection: 2).column
  export = File.new('C:stack' + sheet.name + '.csv','w+')
  csv_row = []

  # loop through each column in each row and write to CSV
  (1..last_row).each do |xlrow|
    (1..last_col).each do |xlcol|
      csv_row << sheet.cells(xlrow,xlcol).value
    end
    export << CSV.generate_line(csv_row)
    csv_row = []
  end
end

# clean up
book.close(savechanges: 'false')
xl.displayalerts = true
xl.quit

这个脚本的眼球基准是大约30秒,每次尝试都在几秒钟之内或之下.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读