簡體   English   中英

使用Roo Gem在Rails中解析XLS電子表格

[英]Parsing XLS Spreadsheet in Rails using Roo Gem

我正在嘗試使用roo gem解析XLS文件,而不使用文件上傳插件。 不幸的是,我無法訪問文件的數據。

我得到錯誤:

#<File:0x007ffac2282250> is not an Excel file

因此,roo無法將文件識別為Excel文件。 我是否需要將文件保存在本地才能使用roo,還是可以解決呢? 我想將excel文件的數據直接解析到數據庫中。

通過的參數:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"yLqOpSK981tDNYjKSoWBh0VnFEKSk0XA/wOt3r+yWJc=", "uploadform"=>{"name"=>"xls", "file"=>#<ActionDispatch::Http::UploadedFile:0x007ffac22b6550 @original_filename="cities2.xls", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"uploadform[file]\"; filename=\"cities2.xls\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/var/folders/qn/70msrkt90pd390sdr14_0g2m0000gn/T/RackMultipart20120306-3729-1m2xcsp>>}, "commit"=>"Save Uploadform"}

我正在嘗試訪問文件

    if params[:uploadform][:file].original_filename =~ /.*\.xls$/i
        oo = Excel.new(params[:uploadform][:file].open)

        rooparse(oo)
    end

我也嘗試過params [:uploadform] [:file] .read和params [:uploadform] [:file],但我認為.open是這里的正確方法!

您是否建議在這里使用回形針或載波?

謝謝您的幫助!

是的,我還無法解析完整文件,但這是另一個問題。 至少我將表中的第一行添加到數據庫中,並包含以下幾行:

require 'fileutils'
require 'iconv'

tmp = params[:uploadform][:file].tempfile
file = File.join("public", params[:uploadform][:file].original_filename)
FileUtils.cp tmp.path, file

oo = Excel.new(file)

rooparse(oo)
FileUtils.rm file

感謝您的輸入!

查看Excel.new的源代碼 ,似乎它想要一個文件名,而不是File對象或處理程序。 換句話說,它需要要解析的文件的完整路徑的字符串表示形式,包括文件名。 此外,它還會檢查文件的擴展名。 因此,如果臨時文件不以“ .xls”結尾,則需要首先重命名該文件。

這是路徑:

params[:file].tempfile.path.

您可以嘗試以下方法:

Excel.new(params[:uploadform][:file].tempfile.path)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM