ruby on rails读取excel文件完整流程

前端上传excel文件,后端读取文件并写入数据库。

话不多说,直接上代码。

代码复制可直接使用,经过多次测试验证。

Gemfile文件中引入:

gem roo, ~> 2.8

然后终端执行:

bundle install

接下来是controller层代码:

class Api::V1::TestController < Api::V1Controller

  require "roo"
  
  def read_excel_data
    file = params[:file]
    data = Roo::Spreadsheet.open(file)
    headers = data.row(1) # get header row
    # sheet_name excel表格中sheet名称
    # 这个根据表格格式自行做处理,我的sheet名称是 @TabelName
    sheet_name = data.sheets.first.gsub("@","") # 根据表格格式,进行改动,最后附有表格模板
    config_datas = []
    data.each_with_index do |row, idx|
    # idx > 0 这个根据表格需求。不插入第一行数据
      if idx > 0
      # 映射表格数据
        config_data = Hash[[headers, row].transpose]
        # 这里创建hash,是为了装入created_at和updated_at,因为我后续插入数据是一次性全部插入,所以需要这两个字段(表格中没有这两个字段)
        time_hash = {
          
   "created_at"=>DateTime.now.utc,"updated_at"=>DateTime.now.utc}
        new_data = config_data.merge(time_hash)
        config_datas << new_data
      end
    end
    render json: {
          
    message: "success", data: save_to_mysql_for_table_name(sheet_name,config_datas), status: 200 }
  end

  private
  def save_to_mysql_for_table_name(sheet_name,data)
    model_name = sheet_name
    # model_name.constantize 把string字符串转换成对象,调用方法
    # 我这边设计的是每次先清空数据,在进行全部入库,看需求自行更改
    model_name.constantize.delete_all
    model_name.constantize.insert_all!(data)
  end

end

下面提供一个我的Excel表格模板,供参考: 下面的Sheet名称:@SheetName

post测试模板:

使用过程中,遇到问题的小伙伴,可以评论留言共同讨论。

经验分享 程序员 微信小程序 职场和发展