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的更多相关文章

  1. Ruby 读取文件

    Ruby 读取文件 一次全读出来 textAll = File.read("fileName.txt") puts textAll 一次读取一行 file = File.open( ...

  2. C# conn.open() 外部表不是预期的格式( 读取EXCEL文件出错)

    环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...

  3. LitJson(读Exce文件写入到json文件):

    读Exce文件写入到json文件汇总: //命名空间 using System.Collections; using System.Collections.Generic; using System. ...

  4. Unity3D移动平台动态读取外部文件全解析

    前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...

  5. python读取caffemodel文件

    caffemodel是二进制的protobuf文件,利用protobuf的python接口可以读取它,解析出需要的内容 不少算法都是用预训练模型在自己数据上微调,即加载"caffemodel ...

  6. informatica读取FTP文件

    以下为一个完整的informatica读取ftp文件,并导入到系统中. 第一步: 通过shell脚本下载压缩包文件 /server/infa_shared/crm_prod/shell/ftpFrom ...

  7. Java读取word文件,字体,颜色

    在Android读取Word文件时,在网上查看时可以用tm-extractors,但好像没有提到怎么读取Word文档中字体的颜色,字体,上下标等相关的属性.但由于需要,要把doc文档中的内容(字体,下 ...

  8. 五种方式让你在java中读取properties文件内容不再是难题

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  9. Javascript写入txt和读取txt文件的方法

    文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...

随机推荐

  1. Python内建GUI模块Tkinter(二)

    Python核心组件 1.Button 按钮组件:一个简单的按钮,用来执行一个命令或别的操作. 参数解析: text:指定按钮上显示的文本: anchor: 指定按钮上文本的位置(N, NE, E, ...

  2. 常用 git 基础命令

    git config --global credential.helper store记住密码 git config user.name xxx配置帐号 git config user.email x ...

  3. 洛谷P4689 [Ynoi2016]这是我自己的发明(莫队,树的dfn序,map,容斥原理)

    洛谷题目传送门 具体思路看别的题解吧.这里只提两个可能对常数和代码长度有优化的处理方法. I 把一个询问拆成\(9\)个甚至\(16\)个莫队询问实在是有点珂怕. 发现询问的一边要么是一个区间,要么是 ...

  4. 【BZOJ3691】游行(网络流)

    [BZOJ3691]游行(网络流) 题面 BZOJ 然而权限题. Description 每年春季,在某岛屿上都会举行游行活动. 在这个岛屿上有N个城市,M条连接着城市的有向道路. 你要安排英雄们的巡 ...

  5. 【BZOJ4008】[HNOI2015]亚瑟王(动态规划)

    [BZOJ4008][HNOI2015]亚瑟王(动态规划) 题面 BZOJ 洛谷 题解 设\(f[i][j]\)表示前\(i\)张卡中有\(j\)张被触发的概率. 分两种情况转移,即当前这张是否被触发 ...

  6. 【BZOJ3142】[HNOI2013]数列(组合计数)

    [BZOJ3142][HNOI2013]数列(组合计数) 题面 BZOJ 洛谷 题解 唯一考虑的就是把一段值给分配给\(k-1\)天,假设这\(k-1\)天分配好了,第\(i\)天是\(a_i\),假 ...

  7. POJ 2672 Tarjan + 缩点 + 拓扑思想

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17383 ...

  8. hdu 1907 (尼姆博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1907 Problem Description Little John is playing very ...

  9. QML学习笔记(七)— 实现可拖拽、编辑、选中的ListView

    鼠标单击可选中当前项,头部呈绿色显示:按压当前项可进行拖拽更换列表项位置:点击数据可以进行编辑: GitHub:八至 作者:狐狸家的鱼 这里是自己定义的model,有些字体和颜色都是使用的全局属性, ...

  10. 微信小程序框架——wepy使后感

    更新:2018年1月10日15:32:22 在ios8及部分机型下会有样式混乱的问题,经查找,原因是缺少浏览器前缀,需要加prefix. 解决方案见链接:wepy-less-autoprefix 另外 ...