在Excel中将xls转换为Ruby中的xlsx

是否有任何gem/插件/代码片段将使用ruby从Excel的XLS转换为XLSX

假设你安装了excel,你应该可以使用win32ole(http://ruby-doc.org/stdlib/libdoc/win32ole/rdoc/index.html)来编写Excel脚本。 最简单的方法可能是将该文件重命名为.xlsx文件,然后使用Excel将其打开并保存。 这可能比试图通过“另存为”操作脚本更容易。

这不是一个Ruby解决scheme,但我也使用AutoIt脚本化Excel界面。

roo是唯一值得思考的选项

编辑

虽然这个链接演示了写xlsx文件

如果您安装了Excel,则可以使用以下方法将xls文件转换为xlsx文件:

require 'win32ole' def xls2xlsx(path, target = nil) raise ArgumentError unless path =~ /.xls\Z/ raise ArgumentError unless File.exist?(path) target = path + 'x' unless target # Save the workbook. / must be \ puts "convert %s to %s" % [path, target] # Create an instance of the Excel application object xl = WIN32OLE.new('Excel.Application') # Make Excel visible 1=visible 0=not visible xl.Visible = 1 #~ xl.Interactive = false #visible, but no input allowed #~ xl.ScreenUpdating = false #make it faster xl.DisplayAlerts = false #No alerts like "don't overwrite # Add a new Workbook object wb = xl.Workbooks.Open(File.expand_path(path)) wb.SaveAs(File.expand_path(target).gsub!(/\//, '\\'), 51 ) #excel 2007 # Close the workbook wb.Close # Quit Excel xl.Quit end 

如果您需要其他方式(xlsx到xls),您可以使用:

 def xlsx2xls(path, target = nil) raise ArgumentError unless path =~ /.xlsx\Z/ raise ArgumentError unless File.exist?(path) target = path.chop unless target # Save the workbook. / must be \ puts "convert %s to %s" % [path, target] # Create an instance of the Excel application object xl = WIN32OLE.new('Excel.Application') # Make Excel visible 1=visible 0=not visible xl.Visible = 1 #~ xl.Interactive = false #visible, but no input allowed #~ xl.ScreenUpdating = false #make it faster xl.DisplayAlerts = false #No alerts like "don't overwrite # Add a new Workbook object wb = xl.Workbooks.Open(File.expand_path(path)) wb.SaveAs(File.expand_path(target).gsub!(/\//, '\\'), -4143 ) #excel97_2003_format # Close the workbook wb.Close # Quit Excel xl.Quit end 

我使用第二种方法与axlsx结合得到一个xls文件。 首先我用axslx创build一个xlsx,然后通过winole将它转换为xls。