将excel导入rails,并忽略文件中的列标题

时间:2015-12-17 16:06:41

标签: ruby-on-rails

我正在研究Rails项目,我正在尝试导入excel文件,但我有以下问题:

我的excel文件包含列标题,如下所示

|姓名|地址|总余额|余额

在我的模特中

姓名,地址,总数,余额

我想读取每列的每个值 我已经实现了以下代码:

def self.import(file)
        allowed_attributes = ["name","address"]
        spreadsheet = open_spreadsheet(file)
        header = spreadsheet.row(1)
        (2..spreadsheet.last_row).each do |i|
            row = Hash[[header, spreadsheet.row(i)].transpose]
            client = find_by_id(row["id"]) || new
            client.attributes = row.to_hash.select { |k,v| allowed_attributes.include? k }
            client.save!
        end
    end


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

但我的问题是它没有从excel中读取列标题 只有当我把它变成与allowd_attributes一样的时候!

我可以在excel文件中使用其他列名,还可以在模型中使用其他列名? 或忽略excel中的列标题?或以某种方式转换列标题,e.x“地址” - > “地址”,“总余额” - > “总” 等等..

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

好的,我这样做了,效果很好! 我只是指定每一栏!

def self.import(file)
    spreadsheet = open_spreadsheet(file)
    (2..spreadsheet.last_row).each do |i|
        name = spreadsheet.cell(i,'A')
        trading_name = spreadsheet.cell(i,'B')
        address = spreadsheet.cell(i,'D')

        @user = User.create(:name => name, :address =>address)

    end
end