Ruby on rails &引用;“OLE2签名无效”;尝试解析XLS文件时
我正在尝试上载和解析一个.XLS文件。我尝试了和,但两者都出现了以下错误:Ruby on rails &引用;“OLE2签名无效”;尝试解析XLS文件时,ruby-on-rails,ruby,parsing,spreadsheet,roo-gem,Ruby On Rails,Ruby,Parsing,Spreadsheet,Roo Gem,我正在尝试上载和解析一个.XLS文件。我尝试了和,但两者都出现了以下错误: Ole::Storage::FormatError in UploadController#upload OLE2 signature is invalid 我找到了一些关于这个错误的资料,给出的唯一答案是将文档重新保存为.XLS,因为虽然原始文档被标记为.XLS,但实际上不是 不幸的是,这并不是一个真正的选项,因为我有用户上传文件,所以它不需要重新保存就可以工作很重要 作为记录,我尝试重新保存文件,现在它可以工作了,
Ole::Storage::FormatError in UploadController#upload
OLE2 signature is invalid
我找到了一些关于这个错误的资料,给出的唯一答案是将文档重新保存为.XLS,因为虽然原始文档被标记为.XLS,但实际上不是
不幸的是,这并不是一个真正的选项,因为我有用户上传文件,所以它不需要重新保存就可以工作很重要
作为记录,我尝试重新保存文件,现在它可以工作了,但我不知道为什么它可以工作,因为重新保存之前和之后的文件格式看起来完全相同。这是Excel中“文件类型”下列出的内容,在以下时间之前和之后:
Microsoft Excel 97-2003工作表(.xls)”
这是Libreoffice中“类型”下列出的内容,在以下内容之前和之后:
Microsoft Excel工作表(应用程序/vnd.ms Excel)
发生什么事了
另外,这是我的简单上传代码:
形式
问题在于
roo
仅读取:
- Excel 2007-2013格式(xlsx、xlsm)
- LibreOffice/OpenOffice.org格式(ods)
- CSV
require 'roo'
require 'roo-xls'
然后它就可以工作了。这里有一个建议。可能不太好看,但应该可以工作,假设对于任何有问题的文件,差异都是一样的
roo xls
我的错误是,我使用的是roo xls,但我在问题中忽略了这一点。不幸的是,excel文件是专有的,但我将尝试用非专有文件重新创建错误。@JoeMorano请这样做,没有人有水晶球:)。@JoeMorano还有一个简单的工作示例-@JoeMorano您需要两个宝石吗?O只有
roo xls
gem是不够的!我确实需要这两个gem。我一直在尝试创建另一个导致相同错误的.xls文件,但我无法…原始文件是由第三方POS软件生成的。我无法以其当前形式共享它,因为它不是我的知识产权,但如果我进行任何更改并保存它,则不会更长的时间会导致错误。如果您有权访问它,您将如何分析它?您会检查元数据或二进制或类似的内容吗?我如何查看文件的二进制?我会使用BeyondCompare来比较这两个文件有什么帮助吗?
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
require 'roo'
require 'roo-xls'