Конвертировать из Excel xls в xlsx в ruby - PullRequest
2 голосов
/ 11 января 2011

Есть ли фрагмент gem / plugin / code, который будет конвертировать из Excel xls в xlsx, используя ruby ​​

Ответы [ 3 ]

1 голос
/ 11 января 2011

Если у вас установлен Excel, вы сможете использовать win32ole (http://ruby -doc.org / stdlib / libdoc / win32ole / rdoc / index.html) для сценария Excel.Возможно, самым простым способом было бы переименовать файл в файл .xlsx, а затем открыть его в Excel и сохранить.Это, вероятно, проще, чем пытаться составить сценарий через операцию «сохранить как».

Это не решение Ruby, но я также написал сценарий для интерфейса Excel, используя AutoIt.

0 голосов
/ 21 марта 2016

Если у вас установлен 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  

Я использую 2-й метод в сочетании с axlsx , чтобы получить xls-файл. Сначала я создаю xlsx с помощью axslx, а затем преобразовываю его через winole в xls.

0 голосов
/ 11 января 2011

roo - единственный вариант, который приходит на ум

РЕДАКТИРОВАТЬ

Хотя эта ссылка демонстрирует написание файлов xlsx

...