安装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(/\'/,"'")
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捕获异常!