安装mysql2

打开cmd:

gem install mysql2

代码

require 'win32ole'
require 'mysql2'
class String
def addslashes
self.gsub(/\'/,"'")
end
end begin
i = 1
excel = WIN32OLE::new('excel.Application')
workbook = excel.Workbooks.Open('C:\Users\devil\Desktop\en.xls')
client = Mysql2::Client.new(:host => "localhost", :username => "root", :database=>'encn', :encoding => 'utf8')
loop do
worksheet = workbook.Worksheets(i)
worksheet.Select data=[] worksheet.UsedRange.Value.each do |v|
next if v[0] == "Keyword"
data << v
end data.each do |one|
sql = "insert into words values(null,'#{one[0].to_s.addslashes}','#{one[1].to_s.addslashes}')"
puts sql
client.query(sql)
end
i=i+1
end rescue=> ex
puts ex.message,"\n"
en

一点分析

首先,ruby for windows安装后已经集成了对office文件格式的文件的读取,称之为win32ole

Win32ole为标准Ruby发行版的一部分。Win32ole是访问Windows自动化的接口,可以让Ruby和Windows应用进行交互。具体说来Win32ole可以操作Word,Excel,IE,Outlook等。

此时需要require进来,当然还有还有是mysql接口

require 'win32ole'
require 'mysql2'

然后,对String类扩展,方便转义sql语句中的关键符号单引号(英文单词中很多),将其转化为html转义字符!仿照php的方法名,addslashes。

class String
def addslashes
self.gsub(/\'/,"&apos;")
end
end

新建一个win32应用接口,并设置为excel应用:

excel = WIN32OLE::new('excel.Application')

打开文件,输入绝对路径,相对路径可能会出问题!

workbook = excel.Workbooks.Open('C:\Users\devil\Desktop\en.xls')

选择excel中的worksheet:

worksheet = workbook.Worksheets(i)
worksheet.Select

打开一个mysql连接

client = Mysql2::Client.new(:host => "localhost", :username => "root", :database=>'encn', :encoding => 'utf8')

代码中使用两次循环,

第一个循环遍历excel的worksheet使用无限循环loop(ruby的无限真好用)

第二次循环是针对:worksheet.UsedRange.Value.each这个遍历器的,它会按行寻找所有已用表格,并按照行写入数组,行里的每一列(格子)又是一维度的数组。将其克隆到data变量中

其实上面一步完全可以省略直接写入到数据库即可!不需要复制到data中

另外,整个loop大循环放在一个异常捕获代码块中,通过rescue捕获异常!

Ruby读excel写入mysql的更多相关文章

  1. spark读文件写入mysql(scala版本)

    package com.zjlantone.hive import java.util.Properties import com.zjlantone.hive.SparkOperaterHive.s ...

  2. python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql

    需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...

  3. python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库

    python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...

  4. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  5. java实现excel与mysql的导入导出

    注意:编码前先导入poi相关jar包 1 /** * 读excel 到list * * @param file excel file * @param fields 字段数组 * @return * ...

  6. Spark读HBase写MySQL

    1 Spark读HBase Spark读HBase黑名单数据,过滤出当日新增userid,并与mysql黑名单表内userid去重后,写入mysql. def main(args: Array[Str ...

  7. python中使用xlrd读excel使用xlwt写excel

    原文地址 :http://www.bugingcode.com/blog/python_xlrd_read_excel_xlwt_write_excel.html 在数据分析和运营的过程中,有非常多的 ...

  8. SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable

    MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...

  9. ruby使用DBI连接MySQL数据库发生异常:in `error': Can't connect to MySQL server on 'localhost' (10061) (DBI::DatabaseError)

    Ruby使用DBI连接MySQL数据库一般为: require "dbi" dbh = DBI.connect("dbi:Mysql:test:localhost&quo ...

随机推荐

  1. hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  2. (11)连个工具类之间的比较4.Collections与Arrays

    集合框架中的工具类:特点:该工具类中的方法都是静态的. Collections:常见方法: 1, 对list进行二分查找: 前提该集合一定要有序. int binarySearch(list,key) ...

  3. 关于Trie KMP AC自动机

    个人认为trie,KMP,AC自动机是思想非常明确的,AC自动机的性质是与KMP算法的思想类似的(失配后跳转) 而KMP是线性的,AC自动机是在tire树上跑KMP,为方便那些不会用指针的小朋友(我也 ...

  4. SQL AlawaysOn 之一:安装域控制器

    一.准备阶段 1.  计算机名称命名 2.IP地址修改.DNS修改 IP地址和DNS不一定要和图上的一致,只要固定就行了 二.安装阶段 1.服务器管理器,仪表盘,点击“添加角色和功能” 2.添加角色和 ...

  5. iOS开发之NSOperation & NSOperationQueue

    1.简介 (1) NSOperationQueue(操作队列)是由GCD提供的队列模型的Cocoa抽象,是一套Objective-C的API,为了使并发(多线程)编程变得更加简单,但效率比GCD略低. ...

  6. Swift应用案例 2.闭包入门到精通

      本文主要介绍Swift的闭包的使用并与OC的Block做比较.学习Swift是绕不过闭包的,因为无论是全局函数还是嵌套函数都是闭包的一种,本文主要介绍闭包表达式. 1.闭包表达式的使用 // 1. ...

  7. dede织梦数据表字段解释

    提示:常用字段,可以在dede后台->系统->SQL命令行工具,执行sql语句来批量修改 dede_addonarticle   附加文章表   aid  int(11)  文章编号    ...

  8. linux下的权限控制

    终于还是要弄服务器了,这是多年前用fedora的时候整理的,也贴出来,顺便也再复习一下. 先来了解一下文件属性,在shell环境里输入:ls -l 可以查看当前目录文件.如:drwxr-xr-x. 1 ...

  9. SPOJ - VISIBLEBOX [multiset的使用]

    tags:[STL][sort][贪心]题解:做法:先对数组a进行排序,再将数组a从头到尾扫一遍,使用multiset维护最小值,如果,即将放入集合的数字>=最小值的两倍,那我们就删除掉多重集合 ...

  10. 性能测试培训:批量执行Jmeter脚本之ant调用

    性能测试培训:批量执行Jmeter脚本之ant调用   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的load ...