如何使用Spreadsheet gem编辑.xls中的标签?

我试图打开一个现有的.xls文件,并覆盖在一个电子表格(选项卡)中的内容。文件上有许多选项卡,许多有枢轴表和其他可视化演示文稿。

我试过电子表格和axlsx。 Axlsx具有很好的控制function,但会覆盖整个文件,包括任何其他创build的选项卡。 电子表格将打开并编辑一个文件,但你必须复制其他标签,这将删除Excel格式。

有没有办法使用Ruby将数据添加到电子表格中的一个选项卡而不更改其他选项卡中的内容?

更新:

这里是我正在testing使用电子表格gem。 我可以打开一个包含多个选项卡的电子表格,其中一个选项卡包含一个数据透视表,另一个包含图表和另一个原始数据。 他们必须保存为一个新的文档,否则你得到一个文件格式不是有效的错误。

open_book = Spreadsheet.open('../data/exports/test_output_dashboard.xls') puts "#{open_book.worksheet(0)}" puts "#{open_book.worksheet(1)}" puts "#{open_book.worksheet(2)}" open_book.write('../data/exports/test_output_dashboard_2.xls') 

如果我只是打开并重新保存新的文件是好的,原始的工作副本。 但是,如果我使用原始数据编辑选项卡,则在打开文件时,会显示需要“修复”的文件,并且没有任何选项卡显示正确的信息。

 open_book = Spreadsheet.open('../data/exports/test_output_dashboard.xls') puts "#{open_book.worksheet(0)}" puts "#{open_book.worksheet(1)}" puts "#{open_book.worksheet(2)}" new_row_index = open_book.worksheet(1).last_row_index + 1 open_book.worksheet(1).insert_row(new_row_index, row_2) open_book.write('../data/exports/test_output_dashboard_4.xls') 

任何build议将数据添加到Excel文档的一个选项卡,同时保持其他标签不变,将不胜感激。 解决scheme可以是任何gem或可以是任何语言或自动化工具。

更新:

以下是我用于testing的Excel仪表板示例。 我正在将行写入数据选项卡。 https://dl.dropboxusercontent.com/u/23226147/test_output_dashboard.xlsx

更新:

使用RubyXL,我可以打开并检查每个选项卡的内容,但保存的文档不能由Excel打开。

workbook = RubyXL :: Parser.parse(“../ data / exports / test_output_dashboard.xlsx”)puts“#{workbook.worksheets [0] .inspect} puts”#{workbook.worksheets [1] .inspect}“放置“#{workbook.worksheets [2] .inspect}”workbook.write(“../ data / exports / test_output_dashboard_5.xlsx”)

如果你只是在寻找一个快速的工具,RubyXL可能会为你做的伎俩:

https://github.com/weshatheleopard/rubyXL

它分析现有的.xlsx .xlsm文件,并有一套体面的文档。

我用修改Excel的spreadhseet与gemwin32ole,它工作正常。

如果您感兴趣的话,这里有一个简短的例子来打开一个文件并激活给定的选项卡:

 excel = WIN32OLE.new('Excel.Application') excel.visible = true filepath = 'e:\tmp\file.xlsx' cur_book = excel.workbooks.Open(filepath) sheet_name = 'sheet1' cur_sheet = cur_book.Worksheets(sheet_name) # put value 10 in Cell(2,2) cur_sheet.Cells(2,2).Value = 10 

官方文档: http : //ruby-doc.org/stdlib-1.9.3/libdoc/win32ole/rdoc/WIN32OLE.html

您可以尝试cloudxls.com API。 您可以使用其API将数据合并到现有的xls和xlsx文件中。 如果这不是一个选项,你很可能必须使用一些Java库,如Apache POI。