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 中的完整路由
找不到或无法读取要导入的文件:在 ruby on rails 项目中使用 tailwind 框架的 bootstrap-datetimepicker