5

.XLS ファイルをアップロードして解析しようとしています。私はroo-xlsSpreadsheetを試しましたが、両方でこのエラーが発生しています:

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

このエラーに関するリソースをいくつか見つけましたが、唯一の答えは、ドキュメントを .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
4

2 に答える 2