使用SPREADSHEET ruby​​ gem编辑电子表格

时间:2013-05-07 13:54:13

标签: ruby rubygems gem spreadsheet

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

我在Ruby 2.0.0中使用了Spreadsheet gem。

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

  

“文件格式无效”

在MS Excel中。

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

以下是示例代码:

require 'rubygems'
require 'spreadsheet'

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

 ## have application logic in here

 book.write('filePath')

2 个答案:

答案 0 :(得分: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

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

它没有乐趣或效率,但它是一种解决问题的方法。希望这有帮助。

答案 1 :(得分:0)

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

相关问题