我必须从电子表格中读取数据,修改一些行,然后将更新的行/单元格写入同一文件。
我在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