如何使用Spreadsheet gem编辑.xls中的选项卡?

时间:2014-01-24 23:36:45

标签: ruby excel

我正在尝试打开现有的.xls文件并覆盖一个电子表格(标签页)中的内容。文件上有很多标签,很多都有数据透视表和其他可视化演示文稿。

我试过Spreadsheet和axlsx。 Axlsx具有出色的控件,但会覆盖整个文件,包括任何其他创建的选项卡。电子表格将打开并编辑文件,但您必须复制其他选项卡,这将删除Excel格式。

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

更新:

以下是我现在使用Spreadsheet 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')

任何有关将数据添加到Excel文档的一个选项卡,同时保持其他选项卡保持不变的建议将非常感激。解决方案可以是任何宝石,也可以是任何语言或自动化工具。

更新:

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

更新:

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

workbook = RubyXL :: Parser.parse(“../ data / exports / test_output_dashboard.xlsx”) 把“#{workbook.worksheets [0] .inspect}” 把“#{workbook.worksheets [1] .inspect}” 把“#{workbook.worksheets [2] .inspect}” workbook.write( “../数据/出口/ test_output_dashboard_5.xlsx”)

3 个答案:

答案 0 :(得分:2)

如果您只是在寻找快速工具,RubyXL可能会为您解决问题:

https://github.com/weshatheleopard/rubyXL

它解析现有的.xlsx .xlsm文件,并提供了一套不错的文档。

答案 1 :(得分:0)

仅适用于Windows用户的解决方案。 我用gem win32ole来修改Excel spreadhseet,效果很好。

如果您感兴趣的话,这里有一个打开文件并激活给定标签的简短示例:

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

答案 2 :(得分:0)

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