ruby-on-rails - 尝试解析 XLS 文件时出现 "OLE2 signature is invalid"

标签 ruby-on-rails ruby parsing spreadsheet roo-gem

我正在尝试上传和解析 .XLS 文件。我试过 roo-xlsSpreadsheet ,但是对于两者,我都收到了这个错误:

Ole::Storage::FormatError in UploadController#upload
OLE2 signature is invalid

我找到了一些关于这个错误的资源,唯一给出的答案是将文档重新保存为 .XLS,因为虽然原始文件被标记为 .XLS,但它实际上不是

不幸的是,这不是一个真正的选择,因为我有用户上传文件,所以它在不需要重新保存的情况下工作很重要。

郑重声明,我尝试重新保存文件,现在它可以正常工作了,但是我不知道为什么可以正常工作,因为重新保存前后文件的格式看起来完全一样。这是在 Excel 中的“文件类型”下列出的前后内容:

Microsoft Excel 97-2003 Worksheet (.xls)"

这是在 Libreoffice 的“类型”下列出的,之前和之后:

Microsoft Excel Worksheet (application/vnd.ms-excel)

这是怎么回事?

此外,这是我的简单上传代码:

表单

<%= form_tag(upload_path, multipart: true) do %>
  <%= file_field_tag :file %>
<% end %>

Controller

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'

然后它会起作用。

关于ruby-on-rails - 尝试解析 XLS 文件时出现 "OLE2 signature is invalid",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52360918/

相关文章:

javascript - 使用 javascript 或 jQuery 读取 HTML 数组

ruby-on-rails - 获取用户给定的 jwt Knock Rails JWT

Ruby:跨一组脚本共享公共(public)变量和方法

java - 将 jruby 脚本打包到包含所有依赖项的 jar 中?

algorithm - 是否有一种已知的算法可以通过匹配的仪表识别歌词和音乐?

java - 在Java中解析和分割大文件大小(800MB UP)的XML内容到多个xml文件的最快方法是什么

python - 如何在 Tornado 请求处理程序中访问我的部分 url/路径

ruby-on-rails - 突然在 UsersController#create 中得到 Errno::ECONNREFUSED

javascript - 使用 Backbone 和 Rails 实现加星收藏系统

Ruby:数组的数组到哈希数组