4

是否有任何 gem/plugin/code 片段可以使用 ruby​​ 从 Excel xls 转换为 xlsx

4

3 回答 3

1

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

这不是 Ruby 解决方案,但我还使用 AutoIt 编写了 Excel 界面的脚本。

于 2011-01-11T13:31:36.050 回答
0

roo is the only option that springs to mind

EDIT

Although this link demonstrates writing xlsx files

于 2011-01-11T12:35:52.943 回答
0

如果您安装了 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 创建一个 xlsx,然后我通过 winole 将它转换成一个 xls。

于 2016-03-21T11:06:16.700 回答