require 'win32ole'
require 'rubygems'
require 'mysql'
class Excel2Mysql @excel
@wbook
@myDB
def open_ExlDB(exlFile, dbName)
@excel=WIN32OLE.new('excel.application')
@wbook=@excel.Workbooks.Open(exlFile)
@myDB=Mysql.connect('localhost','root','root','')
puts @myDB.get_server_info
if @myDB.list_dbs.index(dbName) != nil
puts "exists #{dbName}"
return false
end
@myDB.query("create database #{dbName}")
@myDB.query("use #{dbName}")
return true
end
def xls2db(exlFile, dbName)
finished=0 if !open_ExlDB(exlFile,dbName)
return finished
end
@myDB.query("use #{dbName}")
@wbook.worksheets.each {|ws|
finished+=saveOneSheet(ws)
}
closeAll
return finished
end
private
def saveOneSheet(ws)
if ws.Cells(1,1).value ==nil
puts "#{ws.name} is empty, neednot create database"
return 0
end
colName=ws.Cells(1,1).value
typeName=getType(ws.Cells(2,1).value)
puts ws.Cells(2,1).value
puts typeName
puts "create table #{ws.name}(#{colName} #{typeName})"
@myDB.query("CREATE table #{ws.name}(#{colName} #{typeName},primary key(#{colName}))")
for colum in 2..ws.UsedRange.Columns.Count do
colName=ws.Cells(1,colum).value
typeName=getType(ws.Cells(2,colum).value)
@myDB.query("ALTER table #{ws.name} ADD #{colName} #{typeName}")
end
for row in 2..ws.UsedRange.Rows.Count do
saveRow(ws,row)
end
return 1
end
def saveRow(ws, row)
queryStr="insert into #{ws.name}("
for colum in 1..ws.UsedRange.Columns.Count do
queryStr << ws.Cells(1,colum).value
queryStr+=","
end
queryStr.chop!
queryStr<<") VALUES("
for colum in 1..ws.UsedRange.Columns.Count do
if(ws.Cells(row,colum).value==nil)
queryStr<<"NULL,"
next
end
queryStr<<"'"
queryStr<<ws.Cells(row,colum).value.to_s
queryStr<<"',"
end
queryStr.chop!
queryStr<<")"
puts queryStr
@myDB.query(queryStr)
end
def getType(temValue)
if temValue==nil
return "char(50)"
end
if (temValue=~/\d+\.\d+/)!=nil
return "float"
elsif (temValue=~/\D+/)!=nil
return "char(50)"
end
return "int"
end
public
def closeAll()
@excel.quit()
@myDB.close()
return true
end
end
require 'rubygems'
require 'mysql'
class Excel2Mysql @excel
@wbook
@myDB
def open_ExlDB(exlFile, dbName)
@excel=WIN32OLE.new('excel.application')
@wbook=@excel.Workbooks.Open(exlFile)
@myDB=Mysql.connect('localhost','root','root','')
puts @myDB.get_server_info
if @myDB.list_dbs.index(dbName) != nil
puts "exists #{dbName}"
return false
end
@myDB.query("create database #{dbName}")
@myDB.query("use #{dbName}")
return true
end
def xls2db(exlFile, dbName)
finished=0 if !open_ExlDB(exlFile,dbName)
return finished
end
@myDB.query("use #{dbName}")
@wbook.worksheets.each {|ws|
finished+=saveOneSheet(ws)
}
closeAll
return finished
end
private
def saveOneSheet(ws)
if ws.Cells(1,1).value ==nil
puts "#{ws.name} is empty, neednot create database"
return 0
end
colName=ws.Cells(1,1).value
typeName=getType(ws.Cells(2,1).value)
puts ws.Cells(2,1).value
puts typeName
puts "create table #{ws.name}(#{colName} #{typeName})"
@myDB.query("CREATE table #{ws.name}(#{colName} #{typeName},primary key(#{colName}))")
for colum in 2..ws.UsedRange.Columns.Count do
colName=ws.Cells(1,colum).value
typeName=getType(ws.Cells(2,colum).value)
@myDB.query("ALTER table #{ws.name} ADD #{colName} #{typeName}")
end
for row in 2..ws.UsedRange.Rows.Count do
saveRow(ws,row)
end
return 1
end
def saveRow(ws, row)
queryStr="insert into #{ws.name}("
for colum in 1..ws.UsedRange.Columns.Count do
queryStr << ws.Cells(1,colum).value
queryStr+=","
end
queryStr.chop!
queryStr<<") VALUES("
for colum in 1..ws.UsedRange.Columns.Count do
if(ws.Cells(row,colum).value==nil)
queryStr<<"NULL,"
next
end
queryStr<<"'"
queryStr<<ws.Cells(row,colum).value.to_s
queryStr<<"',"
end
queryStr.chop!
queryStr<<")"
puts queryStr
@myDB.query(queryStr)
end
def getType(temValue)
if temValue==nil
return "char(50)"
end
if (temValue=~/\d+\.\d+/)!=nil
return "float"
elsif (temValue=~/\D+/)!=nil
return "char(50)"
end
return "int"
end
public
def closeAll()
@excel.quit()
@myDB.close()
return true
end
end