我正在尝试上传和解析.XLS文件。我已经尝试过使用roo-xls和Spreadsheet,但同时遇到了这个错误:
Ole::Storage::FormatError in UploadController#upload
OLE2 signature is invalid
我发现了有关此错误的一些资源,唯一的答案是将文档重新保存为.XLS,因为尽管原始文档被标记为.XLS,但实际上不是。 t。
不幸的是,这并不是一个真正的选择,因为我有用户正在上传文件,因此无需重新保存就可以正常工作。
出于记录目的,我尝试重新保存文件,现在它可以工作了,但是我对为什么感到迷茫,因为文件在重新保存之前和之后的格式看起来完全一样。这是Excel之前和之后在“文件类型”下列出的内容:
Microsoft Excel 97-2003工作表(.xls)”
这是之前和之后在Libreoffice中“类型”下列出的内容:
Microsoft Excel工作表(application / vnd.ms-excel)
这是怎么回事?
此外,这是我简单的上传代码:
表格
<%= form_tag(upload_path, multipart: true) do %>
<%= file_field_tag :file %>
<% end %>
控制器
file = params[:file].path
#Roo Attempt
doc = Roo::Excel.new(file)
#Spreadsheet Attempt
require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'
doc = Spreadsheet.open(file).worksheets
答案 0 :(得分:2)
问题在于roo
仅读取:
仅对于 xls ,您需要使用roo-xls gem。
如果您需要更多详细信息,我需要一份excel文件的副本。
您应该拥有:
require 'roo'
require 'roo-xls'
然后它将起作用。
答案 1 :(得分:1)
这是一个建议。可能不是很漂亮,但是应该可以工作,假设有问题的任何文件的差异都是相同的。
roo-xls