我使用GridF存储Excel文件等。我想使用Spreadsheet gem解析这些。
我已经尝试了这个,但它(显然!)不起作用:
1.9.3p194 :036 > db = Mongo::Connection.new.db(Mongoid.database.name)
1.9.3p194 :037 > grid = Mongo::GridFileSystem.new(db)
1.9.3p194 :038 > f = grid.open('test1.xls', 'r')
=> #<GridIO _id: 500ef7cdc5ebb515c9000005>
1.9.3p194 :039 > Spreadsheet.open(f)
NoMethodError: undefined method `flush' for #<GridIO _id: 500ef7cdc5ebb515c9000005>
您是否有一个很好的建议将GridIO类“转换”或“包装”到类似IO :: File的实例中,以便我可以将Excel文件传递给Spreadsheet open方法。
电子表格open方法采用IO实例或指定磁盘上路径的String(后者在使用GridFS时无用):
(Object) open(io_or_path, mode = "rb+", &block)
谢谢!
答案 0 :(得分:2)
看起来这是尚未存在的ruby驱动程序的所需功能。 https://jira.mongodb.org/browse/RUBY-368
您可以将块传递给Spreadsheet.open,如jira ticket中所示:
db = Mongo::Connection.new.db(Mongoid.database.name)
Spreadsheet.open('filename', 'w') do |f|
gridfs = Mongo::GridFileSystem.new(db)
gridfs_file = gridfs.open('test1.xls', 'r')
f.write(gridfs_file.read()) until gridfs_file.eof?
end
答案 1 :(得分:1)
Tempfile.open(["test", ".xls"]) do |fh|
gridfs = Mongo::GridFileSystem.new(Mongoid.database)
gridfs_file = gridfs.open('test1.xls', 'r')
fh.binmode
fh.write(gridfs_file.read)
@xls = Excel.new(fh)
fh.close
end