5

Dobrze, więc sprawdziłem Roo. Świetny klejnot i wszystko, i masz naprawdę podstawową aplikację, która nie ma żadnych modeli. I podstawowy kontroler, klasa i widok. Nie mogę uzyskać arkusza kalkulacyjnego do przesłania, ponieważ dostaję błąd OLE2 signature is invalid. Mam następujący Podstawowa konfiguracjaArkusz kalkulacyjny Roo przesyłający podpis OLE2 jest nieprawidłowy

Controller

class SpreadsheetServiceController < ApplicationController 

    def new 
    end 

    def create  
    parser = SpreadsheetTagService.new(params[:spreadsheet][:file]) 

    respond_to do |format| 
     format.all {render :json => 'Done'} 
    end 
    end 
end 

SpreadsheetTagService

class SpreadsheetTagService 
    include Roo 

    def initialize(uploaded_file) 
    @tmp_destination = "#{Rails.root}/tmp/tag-import.xls" 
    @file_path = save_file_to_tmp(uploaded_file) 
    @file = File.new(@file_path) 
    read_file(@file) 
    end 

    private 
    def save_file_to_tmp(uploaded_file) 
     FileUtils.mv(uploaded_file.tempfile.path, @tmp_destination) 
     @tmp_destination 
    end 

    def read_file(file) 
     @spreadsheet = open_spreadsheet(file) 
     @spreadsheet.each_with_pagename do |name,sheet|  
     Rails.logger.debug(sheet) 
     end  
    end 

    def open_spreadsheet(file) 
     case File.extname(file.path) 
     when ".csv" then Csv.new(file.path, nil, :ignore) 
     when ".xls" then Excel.new(file.path, nil, :ignore) 
     when ".xlsx" then Excelx.new(file.path, nil, :ignore) 
     else raise "Unknown file type: #{file.original_filename}" 
     end 
    end 

end 

Zobacz

<%= form_tag spreadsheetupload_url, multipart: true do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag "Import" %> 
<% end %> 

Odpowiedz

3

Ten artykuł był całkiem przydatne:

http://atomicules.co.uk/2009/07/17/roo-and-ole2-signature-is-invalid.html

Fulltext:

If you get an "Ole::Storage::FormatError: OLE2 signature is invalid" error when reading an Excel spreadsheet using Roo it can probably be solved by resaving the spreadsheet (unfortunately using Excel) and making sure it is saving it as "Microsoft Office Excel Workbook (*.xls)", etc and not something odd.

I had two spreadsheets that had the .xls extension, but seems they were masquerading; when doing a Save As on them one was actually in a "Text (tab delimited)" format and the other in a "Web Page" HTML format. These were system generated files, so I guess that explains their odd form.

+2

Odpowiedzi dotyczące linków są odrzucane w przypadku przepełnienia stosu, ponieważ łącza mogą gnić. –

+0

Link sugeruje ponowne zapisanie pliku jako XLS, na pewno może to być poprawka. Pracował dla mnie. Po wyświetleniu monitu Zapisz jako ... program Excel sugerował, że mój plik był w rzeczywistości plikiem XML. –

4

Zamiast .xls Format użycie .xlsx format.then to będzie działać.

Dla mnie działa.