Я пытаюсь загрузить и проанализировать файл .XLS.Я пробовал с roo-xls и Spreadsheet , но с обоими я получаю эту ошибку:
Ole::Storage::FormatError in UploadController#upload
OLE2 signature is invalid
Я нашел несколько ресурсов об этомошибка, и единственный ответ, который когда-либо был дан, состоит в том, чтобы повторно сохранить документ как .XLS, потому что, хотя оригинал помечен как .XLS, на самом деле это не так.
К сожалению, это не такЭто не вариант, потому что у меня есть пользователи, загружающие файлы, поэтому важно, чтобы он работал без повторного сохранения.
Для записи я попытался повторно сохранить файл, и теперь он работает, но яЯ в растерянности относительно , почему это работает, потому что формат файла до и после повторного сохранения выглядит точно таким же.Вот что было указано в разделе «Тип файла» в Excel до и после:
Microsoft Excel 97-2003 Worksheet (.xls) "* 1019 *
И эточто указано в разделе «Тип» в 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