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

Posted Biubbbbbbbbiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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测试模板:

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

以上是关于ruby on rails读取excel文件完整流程的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 ruby​​ on rails 的在线音频流

如何在应用程序级别加密 ruby​​ on rails 中的完整路由

找不到或无法读取要导入的文件:在 ruby​​ on rails 项目中使用 tailwind 框架的 bootstrap-datetimepicker

如何在 ruby​​ on rails 中显示 Datatable 表格工具(复制、csv、excel、pdf、保存)

墨者-Ruby On Rails漏洞复现第二题(CVE-2019-5418)