ruby读取exce文件,使用roo---Gem
module SEquipsHelper
#设备台账,从excel文件读取信息
require 'roo'
#require 'roo-xls' #读取excel文件
# SEquipsHelper.read_excel
def self.read_excel(path)
#path = 'http://172.168.10.7:6060/file/102.xlsx'
#xlsx = Roo::Spreadsheet.open('/Users/h/Documents/rubyProject/新版本文案.xls',extension: :xls) # if type == 'xlsx'
# end xlsx = Roo::Spreadsheet.open(path, extension: :xlsx) # if type == 'xls' #exce中日期类型 不能自动转化
# xlsx = Roo::Spreadsheet.open(path, extension: :xls)
# end #sheets = xlsx.sheets #返回所有的工作表名
# cell = xlsx.sheet(0).cell('C',1) #取第一个工作表的C1
# cell2 = xlsx.sheet(0).cell('D',2) cols = ['B','C','D','E','F','G','H','I','J','K','L','M','N']
ods = xlsx.sheet(0) #定义默认第一个表
#n1 = ods.first_column #第一列数
#n1 = ods.last_column #最后一列数
#n1 = ods.first_row #第一行数 n2 = ods.last_row #最后一行数
rows = n2 -2
Rails.logger.info "-----------总行数---#{n2}-----"
Rails.logger.info "-----------有效数据行数---#{rows}-----" @excel_datas =[] #存所有行的数据
rows.times do |r| #行数
row_data=[] #存每行的数据
cols.each do |c|
c1 = xlsx.sheet(0).cell(c, r+3)
Rails.logger.info "---------第#{r+3}行,第#{c}列---#{c1}-----"
row_data.push(c1)
end
@excel_datas.push(row_data)
end @excel_datas.each do |e|
#将区域转为 id
area_name = e[12]
area = SArea.find_by(:name => area_name)
s_area_id = area.present? ? area.id : ''
e[12] = s_area_id e.push(Time.now) #添加 时间
e.push(Time.now)
e.push(1) # 设备状态 equip_status 1 启用
end return @excel_datas
end #保存excel到数据库
# SEquipsHelper.save_excel
def self.save_excel(excel_datas)
Rails.logger.info "---save_data----#{excel_datas}---" # SEquip.bulk_insert(:bit_code,
# :equip_code,
# :equip_name,
# :equip_location,
# :equip_norm,
# :equip_nature,
# :equip_material,
# :equip_num,
# :apper_code,
# :apper_time,
# :factory,
# :equip_note,
# :s_area_id,
# :created_at,
# :updated_at,
# :equip_status,
# :s_region_code_id,
# :region_name,
# update_duplicates: true
# ) do |worker|
# excel_datas.each do |attrs|
# Rails.logger.info "导入台账信息----#{attrs}"
# worker.add(attrs)
# end
# end destination_columns = [:bit_code,
:equip_code,
:equip_name,
:equip_location,
:equip_norm,
:equip_nature,
:equip_material,
:equip_num,
:apper_code,
:apper_time,
:factory,
:equip_note,
:s_area_id,
:created_at,
:updated_at,
:equip_status,
:s_region_code_id,
:region_name] SEquip.bulk_insert(*destination_columns, update_duplicates: true) do |worker|
excel_datas.each do |attrs|
Rails.logger.info "导入台账信息----#{attrs}"
worker.add(attrs)
end
end
end # SEquipsHelper.save
# def self.save
# hash = [
# {:bit_code => 'L-FJ0101', :equip_code => 'GJSW12-08-005',:equip_name => '龙门吊(东)' },
# {:bit_code => 'L-FJ0102', :equip_code => 'GJSW12-08-005',:equip_name => '附防爆电机' }
# ] # SEquip.bulk_insert(update_duplicates: true) do |worker|
# hash.each do |attrs|
# Rails.logger.info "导入台账信息----#{attrs}"
# worker.add(attrs)
# end
# end # end end
调用:
#从excel导入台账信息
# post s_equips/excel_import
def excel_import
s_region_code_id = params[:s_region_code_id]
excel = params[:excel]
filename = excel.original_filename Rails.logger.info "----------filename------#{filename}-------"
names = filename.split(".")
file_type = names[1] if file_type == 'xlsx'
region_code = SRegionCode.find_by(:id => s_region_code_id)
region_name = region_code.present? ? region_code.region_name : ''
@excel_datas = SEquipsHelper.read_excel(excel) #从excel读取信息
@excel_datas.each do |e|
e.push(s_region_code_id.to_i)
e.push(region_name)
end
SEquipsHelper.save_excel(@excel_datas) #保存读取到的信息
render json: {status: 200}
# else
# render json: {status: '请选择.xlsx文件'}
end
end
ruby读取exce文件,使用roo---Gem的更多相关文章
- Ruby 读取文件
Ruby 读取文件 一次全读出来 textAll = File.read("fileName.txt") puts textAll 一次读取一行 file = File.open( ...
- C# conn.open() 外部表不是预期的格式( 读取EXCEL文件出错)
环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...
- LitJson(读Exce文件写入到json文件):
读Exce文件写入到json文件汇总: //命名空间 using System.Collections; using System.Collections.Generic; using System. ...
- Unity3D移动平台动态读取外部文件全解析
前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...
- python读取caffemodel文件
caffemodel是二进制的protobuf文件,利用protobuf的python接口可以读取它,解析出需要的内容 不少算法都是用预训练模型在自己数据上微调,即加载"caffemodel ...
- informatica读取FTP文件
以下为一个完整的informatica读取ftp文件,并导入到系统中. 第一步: 通过shell脚本下载压缩包文件 /server/infa_shared/crm_prod/shell/ftpFrom ...
- Java读取word文件,字体,颜色
在Android读取Word文件时,在网上查看时可以用tm-extractors,但好像没有提到怎么读取Word文档中字体的颜色,字体,上下标等相关的属性.但由于需要,要把doc文档中的内容(字体,下 ...
- 五种方式让你在java中读取properties文件内容不再是难题
一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...
- Javascript写入txt和读取txt文件的方法
文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...
随机推荐
- Basic remains POJ - 2305 同余模 高精度处理
题意 给出B(10以内大于0)进制下 p (1000位以内)和m(9位以内) 求 p%m 在b进制下等于什么 思路: 可以计算 1e9不会溢出Int所以m在int值以内 先求m 要处理p 每 ...
- windows查看进程占用并强制结束进程
打开命令提示符(CMD) 查看8080端口被哪个进程占用了,命令:netstat -ano|findstr 8080 上面的8080端口的PID是30160,可以根据PID可以杀死这个进程,用下面 ...
- Codeforces715 B. Complete The Graph
传送门:>Here< 题意:给出一张带权无向图,其中有一些边权为0.要求将边权为0的边的边权重置为一个任意的正整数,使得从S到T的最短路为L.判断是否存在这种方案,如果存在输出任意一种 解 ...
- robotframework测试用例加入注释
*** Variables ***${HOST} 192.168.132.135${USER} username*** Test Cases ***Simple [Documentation] Sim ...
- 【BZOJ 1701】Cow School(斜率优化/动态凸包/分治优化)
原题题解和数据下载 Usaco2007 Jan 题意 小牛参加了n个测试,第i个测试满分是\(p_i\),它的得分是\(t_i\).老师去掉\(t_i/p_i\)最小的d个测试,将剩下的总得分/总满分 ...
- bzoj3702/bzoj2212 二叉树 (线段树合并)
用线段树记每个子树中包含的数,然后合并的时候算出来逆序对的数量(合并a,b时,就是size[ch[a][1]]*size[ch[b][0]]),来决定这个子树要不要翻转 #include<bit ...
- 覆盖的面积 HDU - 1255 (扫描线, 面积交)
求n个矩阵面积相交的部分,和求面积并一样,不过这里需要开两个数组保存覆盖一次和覆盖两次以上的次数的部分,还是模板,主要注意点就是pushup部分,如果我已经被两次覆盖,那我的两个数组在这个root点的 ...
- zabbix添加ceph监控
应用背景: 网上监控ceph集群的资料不算多,git上有个开源的监控项目,是跟zabbix结合的,主要包含一个shell写的脚本和zabbix监控模板,拿来测试小记一下. 开源地址: https:// ...
- Home School Books美国家庭学校教育小学初中高中全套美语教材
加州的资料总共买过三次: ①优妈妈儿童教育,买过美国加州小学一.二年级的语文及相应的练习册,并买了纸版资料. (这是自己学习用的) ②美国加州原版小学教材Reading Wonders 2014新版语 ...
- ArcGIS for qml - 地址地标转换为经纬度(地理编码)
实现输入地址地标转换为其经纬度 本文链接:地理编码 作者: 狐狸家的鱼 Github: 八至 一.地理编码 1.地理编码含义 地址编码(或地理编码)是使用地址中包含的信息来插入地图上的相应位置的过程. ...