2013-05-07 93 views
1

我必须从电子表格读取数据才能修改某些行,然后将更新的行/单元格写入相同的文件。使用SPREADSHEET编辑电子表格

我已经使用Spreadsheet gem和Ruby 2.0.0。

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

“文件格式无效”

在MS Excel

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

下面是示例代码:

require 'rubygems' 
require 'spreadsheet' 

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

## have application logic in here 

book.write('filePath') 
+0

不[商务部](https://github.com/zdavatz/spreadsheet)明确地表示:“电子表格支持Ruby 1.8.6,1.8.7,1.9.2 ,1.9.3“?当你写入同一个文件时,你会收到警告吗? (可能是源于['ruby-ole'](https://github.com/aquasync/ruby-ole)''spreadsheet'depends]的问题。 – 2013-05-07 14:11:17

+0

没有....没有警告 – user2330585 2013-05-07 14:13:02

+0

1.9.3会发生什么? – 2013-05-07 14:14:19

回答

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 

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

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

0

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

相关问题