【问题标题】:Ruby on rails, reading and showing csv-file doesn't work?Ruby on rails,读取和显示 csv 文件不起作用?
【发布时间】:2011-10-26 12:03:51
【问题描述】:

我在 Ruby on Rails 中实现,我只想做一些简单的事情,我只想读取一个 csv 文件,然后在视图中显示输出。我有一些对我来说似乎不错的代码,但我总是得到错误:无法将 Tempfile 转换为字符串 这是我的控制器:

def match
file = params[:file]

@original_filename = file.original_filename
tmpfile = Tempfile.new("redmine_project_importer")
if tmpfile
    tmpfile.write(file.read)
    tmpfile.close
    tmpfilename = File.basename(tmpfile.path)
      if !$tmpfiles
        $tmpfiles = Hash.new
      end
      $tmpfiles[tmpfilename] = tmpfile
    else
      flash[:error] = "Cannot save import file."
      return
    end
 session[:importer_tmpfile] = tmpfilename
sample_count = 5
i = 0
@samples = []
FasterCSV.open(file, "r") do |row|       
        @samples[i] = row
        i += 1
        if i > sample_count
            break
        end
    end

我的看法是:

<% form_tag({:action => 'result'}, {:multipart => true}) do %>
<table>  

<% @samples.each do |sample| %>
  <tr>
     <td>sample</td>    
  </tr>
<% end %>
</table>

谁能帮帮我? 问候

【问题讨论】:

    标签: ruby-on-rails ruby csv


    【解决方案1】:

    1) FasterCSV.open() 需要一个字符串文件名,而您正在向它传递一个 File 对象。

    2) 如果你想迭代行,它是FasterCSV.foreach(filename)。或FasterCSV.open().each

    但在你的情况下,如果你有一个上传的文件参数,你最好使用

    FasterCSV.new(params[:file]).each do |line|
    

    等等

    【讨论】:

    • 我已经这样做了,我没有错误了。但我仍然没有任何输出。就像@samples 是空的,这是怎么回事?
    【解决方案2】:

    我没有使用过 FasterCSV,但我认为你应该看看电子表格 - http://spreadsheet.ch/

    您应该能够像这样简单地读取 csv 文件:

    book = Spreadsheet.open path_to_file
    sheet  = book.worksheet 0
    

    然后您可以遍历行并执行您想要的任何操作:

    sheet.each do |row|
      #code
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多