Czy istnieje jakiś fragment gem / plugin / code, który konwertuje z Excel xls do xlsx używając ruby
Odpowiedzi:
1 dla odpowiedzi № 1Zakładając, że masz zainstalowany program Excel, powinieneśmoże używać Win32ole (http://ruby-doc.org/stdlib/libdoc/win32ole/rdoc/index.html) do skryptowania Excela. Najprostszą techniką będzie prawdopodobnie zmiana nazwy pliku na plik .xlsx, a następnie otwarcie go w programie Excel i zapisanie. Prawdopodobnie jest to łatwiejsze niż próba napisania skryptu przez operację "zapisz jako".
To nie jest rozwiązanie typu Ruby, ale także skryptowałem interfejs programu Excel za pomocą AutoIt.
0 dla odpowiedzi nr 2
roo to jedyna opcja, która przychodzi na myśl
EDYTOWAĆ
Mimo że ten link demonstruje pisanie plików xlsx
0 dla odpowiedzi № 3
Jeśli masz zainstalowany program Excel, możesz użyć poniższej metody do przekonwertowania pliku Xls do pliku Xlsx:
require "win32ole"
def xls2xlsx(path, target = nil)
raise ArgumentError unless path =~ /.xlsZ/
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
Jeśli potrzebujesz w inny sposób (xlsx do xls), możesz użyć:
def xlsx2xls(path, target = nil)
raise ArgumentError unless path =~ /.xlsxZ/
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
Używam drugiej metody w połączeniu z axlsx aby uzyskać plik xls. Najpierw tworzę xlsx za pomocą axslx, a następnie przekształcam go przez winole w xls.