编辑电子表格使用电子表格红宝石宝石



我必须从电子表格中读取数据,修改一些行,然后将更新的行/单元格写入同一文件。

我在Ruby 2.0.0中使用了电子表格gem。

当我将结果写回同一个文件时,我无法再打开xls了。我得到一个错误

"文件格式无效"

当更新写入不同的文件时,我可以打开文件,但它处于受保护的视图中。这个问题有解决办法吗?

下面是示例代码:
require 'rubygems'
require 'spreadsheet'
 book = Spreadsheet::open('filePath')
 sheet = book.worksheet 0
 ## have application logic in here
 book.write('filePath')

我已经处理过这个问题几次了,他们已经在日志上记录了大约一年了。

第一个问题是,当电子表格加载它时,它锁定了文件,并且没有明确的方法来关闭它,我能够让它不锁定的唯一方法是使用这个代码块。它打开它并将第一个工作表存储到它自己的变量中,然后关闭该文件。

worksheet = nil
    Spreadsheet.open workbook_name do |inner_book|
      worksheet = inner_book.worksheet 0
    end
worksheet

如果你想要所有的工作表,你可以做类似的事情。除了文件打开关闭/问题之外,您还存在根据格式捕获工作表内容的问题。我知道出于我的目的,我最终做了以下操作来捕获内容。遗憾的是,这会丢失源电子表格中的任何格式。

rows = []
worksheet.each do |row|
  rows << row
end

然后您可以创建自己的工作簿/工作表并遍历这些行并将它们添加到新的工作表/工作表中。然后用相同的文件名保存新书。

这既不有趣也不有效,但这是解决问题的一种方法。

检查文件扩展名。电子表格、writeexcel等宝石似乎无法与XLSX文件一起工作。try .xls not .xlsx

最新更新