1

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

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

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

“文件格式无效”

在 MS Excel 中。

当更新被写入另一个文件时,我可以打开该文件,但它处于受保护的视图中。这个问题有解决方案吗?

下面是示例代码:

require 'rubygems'
require 'spreadsheet'

 book = Spreadsheet::open('filePath')
 sheet = book.worksheet 0

 ## have application logic in here

 book.write('filePath')
4

2 回答 2

3

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

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

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

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

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

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

它既不有趣也不高效,但它是解决问题的一种方式。希望这有帮助。

于 2013-05-07T18:08:18.797 回答
0

检查您的文件扩展名。电子表格、writeexcel..etc gem 似乎无法与 xlsx 文件一起使用。 尝试 .xls 而不是 .xlsx

于 2016-03-03T07:50:50.763 回答