波斯马BOSSMA Information Technology

Excel使用VB宏生成SQL语句

发布时间:2007年11月21日 / 分类:ASP.NET / 19,102 次浏览 / 评论

  有时候需要将Excel文件中的数据导入到数据库中,常用的做法是使用程序读取Excel,然后存入数据库;这里换一个方法,用Excel生成SQL语句,然后用这些SQL语句来更新数据库。
  本文主要说明Excel如何使用VB宏构造需要的SQL语句,并生成文件。

点击[这里]下载示例程序

1、先看看生成SQL的界面:
Excel截图

2、如何添加按钮:
依次打开:视图–工具栏–控件工具箱,选择“命令按钮”,自己画一个就行了;
依次打开:右键–属性,可以修改名称、样式等。
具体操作可以上网找找。

3、如何使用VB宏:
依次打开:工具–宏–安全性,看看你的Excel是否允许使用“宏”。
然后打开:工具–宏–Visual Basic 编辑器,双击左侧的“Sheet1”,然后在右侧的代码区域粘贴如下代码:

'最大行数
Const MAX_NUM_ROW = 5000

'导出文件路径所在单元格
Const PATH_OUTPUT_ROW = 3
Const PATH_OUTPUT_COL = 3

'定义列常量
Const NAME_COL = 1
Const GENDER_COL = 2
Const PHONE_COL = 3
Const EMAIL_COL = 4

'读取数据开始行数
Const START_ROW = 5

'定义数据实体类
Private Type Tmplt
NAME As String
GENDER As String
PHONE As String
EMAIL As String
End Type

'行数变量
Dim noOfTmplts As Integer

'数据实体类数组
Dim TmpltArray(MAX_NUM_ROW) As Tmplt

'点击按钮触发事件
Private Sub CommandButton1_Click()
generateSQL
End Sub

'生成SQL
Private Sub generateSQL()
makedir
initData
writeToFile
End Sub

'构建文件输出路径
Private Sub makedir()
On Error Resume Next
MkDir Sheet1.Cells(PATH_OUTPUT_ROW, PATH_OUTPUT_COL)
End Sub

'读取Excel数据,填充实体类数组
Private Sub initData()

Erase TmpltArray
noOfTmplts = 0

Dim j As Integer

'循环读取Excel数据行
For j = START_ROW To MAX_NUM_ROW

TmpltArray(noOfTmplts).NAME = Sheet1.Cells(j, NAME_COL)
TmpltArray(noOfTmplts).GENDER = Sheet1.Cells(j, GENDER_COL)
TmpltArray(noOfTmplts).PHONE = Sheet1.Cells(j, PHONE_COL)
TmpltArray(noOfTmplts).EMAIL = Sheet1.Cells(j, EMAIL_COL)
noOfTmplts = noOfTmplts + 1

Next
End Sub

'读取实体类数组,生成SQL并写入文件
Private Sub writeToFile()

Dim lvOutputPath As String

'输出文件路径
lvOutputPath = Sheet1.Cells(PATH_OUTPUT_ROW, PATH_OUTPUT_COL)

If lvOutputPath = "" Then
MsgBox "没有找到输出文件路径!"
Exit Sub
End If

fileNum = FreeFile

'打开输出文件
Open lvOutputPath For Output As fileNum


Dim lvUserSql As String
Dim nameStr As String
Dim genderStr As String
Dim phoneStr As String
Dim emailStr As String

'循环生成SQL
For j = 0 To noOfTmplts - 1

nameStr = TmpltArray(j).NAME
genderStr = TmpltArray(j).GENDER
phoneStr = TmpltArray(j).PHONE
emailStr = TmpltArray(j).EMAIL

If nameStr <> "" Then
lvUserSql = "Insert into Students(name,gender,phone,email) values('" & nameStr & "','" & genderStr & "','" & phoneStr & "','" & emailStr & "');"
Print #fileNum, lvUserSql
End If
Next

Close fileNum

MsgBox "文件生成完成!"

Exit Sub

Err_Open_File:
Close lvFileNum

If Err.Number = 76 Then
'路径未找到
MsgBox Err.Description
Exit Sub

Else
MsgBox Err.Description
Exit Sub
End If

End Sub

OK,这样就可以了!点击你的按钮,看看生成文件了吗?
如果按钮还是编辑状态,关了再打开就行了。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《Excel使用VB宏生成SQL语句

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论