ruby-on-rails - 尝试解析 XLS 文件时出现“OLE2 签名无效”
问题描述
我正在尝试上传和解析一个 .XLS 文件。我已经尝试过roo-xls和Spreadsheet,但是两者都出现了这个错误:
Ole::Storage::FormatError in UploadController#upload
OLE2 signature is invalid
我找到了一些关于此错误的资源,唯一给出的答案是将文档重新保存为 .XLS,因为虽然原始文件标记为 .XLS,但实际上并非如此。
不幸的是,这不是一个真正的选择,因为我有用户上传文件,所以它不需要重新保存就可以工作很重要。
作为记录,我尝试重新保存文件,现在它可以工作了,但我不知道它为什么工作,因为重新保存之前和之后的文件格式看起来完全相同。这是 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
解决方案
问题是roo
只读:
- Excel 2007 - 2013 格式(xlsx、xlsm)
- LibreOffice / OpenOffice.org 格式 (ods)
- CSV
仅对于xls,您需要使用roo-xls gem。
如果您需要更多详细信息,我需要一份 excel 文件的副本。
你应该有:
require 'roo'
require 'roo-xls'
然后它将起作用。
推荐阅读
- html - HTML / CSS 页面布局 - 扩展 DIV
- for-loop - Gnuplot:在内部重新绘制
- javascript - 在javascript中订购罗马数字
- c# - 将文本插入文字处理文档中的表格 (Open XML )
- javascript - node.js JavaScript 文件更改不会在前端生效
- javascript - React Native,无法滚动flatList
- c# - 更改用户 ID 类型时无法在 asp.net core Identity + PostgreSQL 上运行 Add-Migration
- javascript - 在 Laravel 上打印提交表单的窗口而不进行重定向
- php - 处理 php xpath 属性中的任何类型的引号
- aws-lambda - 发生无服务器错误:ApiGatewayResourcePatientsetPidVar - 此资源的同级 ({id})