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测试模板:
使用过程中,遇到问题的小伙伴,可以评论留言共同讨论。