VB中Excel 2010的导入导出操作
编写人:左丘文
2015-4-11
近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Excel(程序支持excel2010),在此做个小结,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。
1、 程序导入导出操作介面:
2、 从excel导入数据代码:

1 Private Sub cmdinput_Click()
2
3 'Modify By KevinZhang 2014-8-21
4 Dim sFile As String
5 Dim btrans As Boolean
6 sFile = txtFILE.Text
7 If Not FileExists(sFile) Then
8 MsgBox "指定的导入文件不存在,请重新选择!", vbOKOnly + vbExclamation
9 Exit Sub
10 End If
11 '连接excel
12 Dim conn
13 Set conn = CreateObject("ADODB.Connection")
14 'connExcelStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" & sFile & ";Extended Properties='Excel 8.0;HDR=YES'"
15 'connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & sFile & ";Extended Properties='Excel 12.0 Xml;HDR=YES;'"
16 'connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & sFile & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"
17 connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" & sFile & "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'"
18 On Error GoTo checkgetexcel
19 conn.Open connExcelStr
20 Dim rs As ADODB.Recordset
21 Set rs = New ADODB.Recordset
22 With rs
23 .ActiveConnection = conn
24 .LockType = adLockReadOnly
25 .CursorLocation = adUseClient
26 .CursorType = adOpenKeyset
27 .Open "select * from [Sheet1$]"
28 End With
29
30
31 Dim rs2 As ADODB.Recordset
32 Set rs2 = New ADODB.Recordset
33 Dim i As Integer
34 If (rs.RecordCount >= 1) Then
35 i = rs.RecordCount
36
37 '*****************************************************************************
38 '同时生成一个错误清单
39
40 '定义变量
41 Dim j, k, o, z As Long
42
43 '初始化循环的变量数值
44 j = 2
45 '初始化Excel组建
46 Set xlApp = CreateObject("Excel.Application")
47 Set xlBook = xlApp.Workbooks.Add
48 Set xlsheet = xlBook.WorkSheets("Sheet1")
49
50 '打开选定的文件
51 'Set xlBook = xlApp.Workbooks.Open(sFile)
52 '设置其可见
53 'xlApp.Visible = True
54 '设置其工作表的名称
55 Set xlsheet = xlBook.WorkSheets("Sheet1") '设置活动工作表
56 '执行SQL连接方法,查询语句,和返回的文本
57
58 '循环,到数据库的总行
59 xlsheet.Cells(1, 1) = "料号" '给单元格(row,col)赋值
60 xlsheet.Cells(1, 2) = "单价" '给单元格(row,col)赋值
61 xlsheet.Cells(1, 3) = "错误信息" '给单元格(row,col)赋值
62
63 '***********************************************************************
64 Call ShowInforDlg("正在导入数据,请稍候...")
65 ConGamma.beginTrans
66 btrans = True
67 rs.MoveFirst
68 Do While Not rs.EOF
69 Set rs2 = ExecSQL("Insert_PackMat_Auto '" & txtYEAR.Text & " ','" & txtIQUARTER.Text & "' ,'" _
70 & rs!PRONUM & "','" & rs!price & "'", ConGamma)
71
72
73 If rs2.RecordCount = 1 Then
74
75 If rs2.Fields(0).Value = "存在相同物料成本记录" Then
76 'MsgBox "导入失败,请先删除该料号:" & rs!PRONUM & "再导入!!", vbCritical
77
78 '*************************************************************************************************
79 '初始化列
80 o = 0
81 For k = 1 To rs.Fields.count
82 '给Excel列赋值
83 xlsheet.Cells(j, k) = rs.Fields(o).Value '给单元格(row,col)赋值
84 '列往后进一位
85 o = o + 1
86
87 Next
88 xlsheet.Cells(j, rs.Fields.count + 1) = "存在相同物料成本记录" '给单元格(row,col)赋值
89 '行往后一步
90 j = j + 1
91 '*******************************************************************************************
92 i = i - 1
93 End If
94 Else
95 'MsgBox "导入失败,请先检查该料号:" & rs!PRONUM, , vbCritical
96 '*************************************************************************************************
97 '初始化列
98 o = 0
99 For k = 1 To rs.Fields.count
100 '给Excel列赋值
101 xlsheet.Cells(j, k) = rs.Fields(o).Value '给单元格(row,col)赋值
102 '列往后进一位
103 o = o + 1
104
105 Next
106 xlsheet.Cells(j, rs.Fields.count + 1) = "请先检查该料号" '给单元格(row,col)赋值
107 '行往后一步
108 j = j + 1
109 '*******************************************************************************************
110
111 i = i - 1
112
113
114 End If
115
116 rs.MoveNext
117 Loop
118 ConGamma.CommitTrans
119 rs.MoveFirst
120 btrans = False
121 Call UnloadInforDlg
122 If rs.RecordCount > 0 Then
123 MsgBox "共有" & i & "条记录被导入,错误信息请阅导入文件目录的Error.xls文件", vbInformation
124 End If
125 End If
126 '**********************************************
127 'xlsheet.PrintOut '打印工作表
128 Dim ssfile() As String
129 Dim ssfile2 As String
130 ssfile = Split(sFile, "")
131 For i = 0 To UBound(ssfile) - 1
132 ssfile2 = ssfile2 & ssfile(i) & ""
133 Next
134 ssfile2 = ssfile2 & "Error.xls"
135 xlBook.SaveAs (ssfile2)
136 xlBook.Close (True) '关闭工作簿
137 xlApp.Quit '结束EXCEL对象
138 Set xlApp = Nothing '释放xlApp对象
139 '******************************************************
140 rs.Close
141 Set rs = Nothing
142 If Trim(txtYEAR.Text) <> "" Then
143 Call frmMDI.ITMDIAdminX.ControlSearch
144 Exit Sub
145 End If
146
147 checkgetexcel:
148 MsgBox "请检查excel是否存在,excel中是否有Sheet1的工作表。(系统默认读取excel的Sheet1的工作表)", vbInformation
149 If ERR.Number <> 0 Then
150 MsgBox ERR.Description
151 End If
152
153 Exit Sub
154 End Sub
2
3 'Modify By KevinZhang 2014-8-21
4 Dim sFile As String
5 Dim btrans As Boolean
6 sFile = txtFILE.Text
7 If Not FileExists(sFile) Then
8 MsgBox "指定的导入文件不存在,请重新选择!", vbOKOnly + vbExclamation
9 Exit Sub
10 End If
11 '连接excel
12 Dim conn
13 Set conn = CreateObject("ADODB.Connection")
14 'connExcelStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" & sFile & ";Extended Properties='Excel 8.0;HDR=YES'"
15 'connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & sFile & ";Extended Properties='Excel 12.0 Xml;HDR=YES;'"
16 'connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & sFile & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"
17 connExcelStr = "Provider=Microsoft.ACE.OLEDB.12.0; Persist Security Info=False;Data Source=" & sFile & "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=2'"
18 On Error GoTo checkgetexcel
19 conn.Open connExcelStr
20 Dim rs As ADODB.Recordset
21 Set rs = New ADODB.Recordset
22 With rs
23 .ActiveConnection = conn
24 .LockType = adLockReadOnly
25 .CursorLocation = adUseClient
26 .CursorType = adOpenKeyset
27 .Open "select * from [Sheet1$]"
28 End With
29
30
31 Dim rs2 As ADODB.Recordset
32 Set rs2 = New ADODB.Recordset
33 Dim i As Integer
34 If (rs.RecordCount >= 1) Then
35 i = rs.RecordCount
36
37 '*****************************************************************************
38 '同时生成一个错误清单
39
40 '定义变量
41 Dim j, k, o, z As Long
42
43 '初始化循环的变量数值
44 j = 2
45 '初始化Excel组建
46 Set xlApp = CreateObject("Excel.Application")
47 Set xlBook = xlApp.Workbooks.Add
48 Set xlsheet = xlBook.WorkSheets("Sheet1")
49
50 '打开选定的文件
51 'Set xlBook = xlApp.Workbooks.Open(sFile)
52 '设置其可见
53 'xlApp.Visible = True
54 '设置其工作表的名称
55 Set xlsheet = xlBook.WorkSheets("Sheet1") '设置活动工作表
56 '执行SQL连接方法,查询语句,和返回的文本
57
58 '循环,到数据库的总行
59 xlsheet.Cells(1, 1) = "料号" '给单元格(row,col)赋值
60 xlsheet.Cells(1, 2) = "单价" '给单元格(row,col)赋值
61 xlsheet.Cells(1, 3) = "错误信息" '给单元格(row,col)赋值
62
63 '***********************************************************************
64 Call ShowInforDlg("正在导入数据,请稍候...")
65 ConGamma.beginTrans
66 btrans = True
67 rs.MoveFirst
68 Do While Not rs.EOF
69 Set rs2 = ExecSQL("Insert_PackMat_Auto '" & txtYEAR.Text & " ','" & txtIQUARTER.Text & "' ,'" _
70 & rs!PRONUM & "','" & rs!price & "'", ConGamma)
71
72
73 If rs2.RecordCount = 1 Then
74
75 If rs2.Fields(0).Value = "存在相同物料成本记录" Then
76 'MsgBox "导入失败,请先删除该料号:" & rs!PRONUM & "再导入!!", vbCritical
77
78 '*************************************************************************************************
79 '初始化列
80 o = 0
81 For k = 1 To rs.Fields.count
82 '给Excel列赋值
83 xlsheet.Cells(j, k) = rs.Fields(o).Value '给单元格(row,col)赋值
84 '列往后进一位
85 o = o + 1
86
87 Next
88 xlsheet.Cells(j, rs.Fields.count + 1) = "存在相同物料成本记录" '给单元格(row,col)赋值
89 '行往后一步
90 j = j + 1
91 '*******************************************************************************************
92 i = i - 1
93 End If
94 Else
95 'MsgBox "导入失败,请先检查该料号:" & rs!PRONUM, , vbCritical
96 '*************************************************************************************************
97 '初始化列
98 o = 0
99 For k = 1 To rs.Fields.count
100 '给Excel列赋值
101 xlsheet.Cells(j, k) = rs.Fields(o).Value '给单元格(row,col)赋值
102 '列往后进一位
103 o = o + 1
104
105 Next
106 xlsheet.Cells(j, rs.Fields.count + 1) = "请先检查该料号" '给单元格(row,col)赋值
107 '行往后一步
108 j = j + 1
109 '*******************************************************************************************
110
111 i = i - 1
112
113
114 End If
115
116 rs.MoveNext
117 Loop
118 ConGamma.CommitTrans
119 rs.MoveFirst
120 btrans = False
121 Call UnloadInforDlg
122 If rs.RecordCount > 0 Then
123 MsgBox "共有" & i & "条记录被导入,错误信息请阅导入文件目录的Error.xls文件", vbInformation
124 End If
125 End If
126 '**********************************************
127 'xlsheet.PrintOut '打印工作表
128 Dim ssfile() As String
129 Dim ssfile2 As String
130 ssfile = Split(sFile, "")
131 For i = 0 To UBound(ssfile) - 1
132 ssfile2 = ssfile2 & ssfile(i) & ""
133 Next
134 ssfile2 = ssfile2 & "Error.xls"
135 xlBook.SaveAs (ssfile2)
136 xlBook.Close (True) '关闭工作簿
137 xlApp.Quit '结束EXCEL对象
138 Set xlApp = Nothing '释放xlApp对象
139 '******************************************************
140 rs.Close
141 Set rs = Nothing
142 If Trim(txtYEAR.Text) <> "" Then
143 Call frmMDI.ITMDIAdminX.ControlSearch
144 Exit Sub
145 End If
146
147 checkgetexcel:
148 MsgBox "请检查excel是否存在,excel中是否有Sheet1的工作表。(系统默认读取excel的Sheet1的工作表)", vbInformation
149 If ERR.Number <> 0 Then
150 MsgBox ERR.Description
151 End If
152
153 Exit Sub
154 End Sub
3、 导出到excel代码:

1 Private Sub cmdExport_Click()
2 'Modify By KevinZhang 2014-8-22
3 '定义变量
4 Dim i, j, k, o, z As Long
5
6 Dim rs As ADODB.Recordset
7 Dim sFile As String
8 '初始化文件打开窗口
9 If txtFILE.Text <> "" Then
10 sFile = RTrim(txtFILE.Text)
11 Else '如果等于空,则关闭方法
12 MsgBox "请选择要导出的文件名", vbCritical
13 Exit Sub
14 End If
15
16 If FileExists(sFile) Then
17 If MsgBox("存在相同的档案名称,要替代吗?", vbQuestion + vbYesNoCancel) <> vbYes Then Exit Sub
18 End If
19
20 Screen.MousePointer = vbHourglass
21
22 On Error GoTo Err_Proc
23
24 '初始化循环的变量数值
25 i = 2
26 j = 1
27 '初始化Excel组建
28 Set xlApp = CreateObject("Excel.Application")
29 Set xlBook = xlApp.Workbooks.Add
30 Set xlsheet = xlBook.WorkSheets("Sheet1")
31
32 '打开选定的文件
33 'Set xlBook = xlApp.Workbooks.Open(sFile)
34 '设置其可见
35 'xlApp.Visible = True
36 '设置其工作表的名称
37 Set xlsheet = xlBook.WorkSheets("Sheet1") '设置活动工作表
38 '执行SQL连接方法,查询语句,和返回的文本
39 Set rs = ExecSQL("select * from PACKMATDTL where YEAR= '" & txtYEAR.Text & " ' AND IQUARTER='" & txtIQUARTER.Text & "'", ConGamma)
40 '循环,到数据库的总行
41
42
43 xlsheet.Cells(1, 1) = "年份" '给单元格(row,col)赋值
44 xlsheet.Cells(1, 2) = "季度" '给单元格(row,col)赋值
45 xlsheet.Cells(1, 3) = "料号" '给单元格(row,col)赋值
46 xlsheet.Cells(1, 4) = "单价" '给单元格(row,col)赋值
47
48 For z = 1 To rs.RecordCount
49 '初始化列
50 o = 0
51 For k = 1 To rs.Fields.count
52 '给Excel列赋值
53 xlsheet.Cells(i, k) = rs.Fields(o).Value '给单元格(row,col)赋值
54 '列往后进一位
55 o = o + 1
56
57 Next
58 '数据库标往后一步
59 rs.MoveNext
60 '行往后一步
61 i = i + 1
62 j = j + 1
63 Next
64 'xlsheet.PrintOut '打印工作表
65 xlBook.SaveAs (sFile)
66 xlBook.Close (True) '关闭工作簿
67 xlApp.Quit '结束EXCEL对象
68 Set xlApp = Nothing '释放xlApp对象
69 MsgBox "共有" & rs.RecordCount & "条记录被导出", vbInformation
70 rs.Close
71 Set rs = Nothing
72 Screen.MousePointer = vbDefault
73 Exit Sub
74
75
76
77 Err_Proc:
78 Screen.MousePointer = vbDefault
79 MsgBox "请确认您的电脑已安装Excel!", vbExclamation, "提示"
80
81
82
83 End Sub
2 'Modify By KevinZhang 2014-8-22
3 '定义变量
4 Dim i, j, k, o, z As Long
5
6 Dim rs As ADODB.Recordset
7 Dim sFile As String
8 '初始化文件打开窗口
9 If txtFILE.Text <> "" Then
10 sFile = RTrim(txtFILE.Text)
11 Else '如果等于空,则关闭方法
12 MsgBox "请选择要导出的文件名", vbCritical
13 Exit Sub
14 End If
15
16 If FileExists(sFile) Then
17 If MsgBox("存在相同的档案名称,要替代吗?", vbQuestion + vbYesNoCancel) <> vbYes Then Exit Sub
18 End If
19
20 Screen.MousePointer = vbHourglass
21
22 On Error GoTo Err_Proc
23
24 '初始化循环的变量数值
25 i = 2
26 j = 1
27 '初始化Excel组建
28 Set xlApp = CreateObject("Excel.Application")
29 Set xlBook = xlApp.Workbooks.Add
30 Set xlsheet = xlBook.WorkSheets("Sheet1")
31
32 '打开选定的文件
33 'Set xlBook = xlApp.Workbooks.Open(sFile)
34 '设置其可见
35 'xlApp.Visible = True
36 '设置其工作表的名称
37 Set xlsheet = xlBook.WorkSheets("Sheet1") '设置活动工作表
38 '执行SQL连接方法,查询语句,和返回的文本
39 Set rs = ExecSQL("select * from PACKMATDTL where YEAR= '" & txtYEAR.Text & " ' AND IQUARTER='" & txtIQUARTER.Text & "'", ConGamma)
40 '循环,到数据库的总行
41
42
43 xlsheet.Cells(1, 1) = "年份" '给单元格(row,col)赋值
44 xlsheet.Cells(1, 2) = "季度" '给单元格(row,col)赋值
45 xlsheet.Cells(1, 3) = "料号" '给单元格(row,col)赋值
46 xlsheet.Cells(1, 4) = "单价" '给单元格(row,col)赋值
47
48 For z = 1 To rs.RecordCount
49 '初始化列
50 o = 0
51 For k = 1 To rs.Fields.count
52 '给Excel列赋值
53 xlsheet.Cells(i, k) = rs.Fields(o).Value '给单元格(row,col)赋值
54 '列往后进一位
55 o = o + 1
56
57 Next
58 '数据库标往后一步
59 rs.MoveNext
60 '行往后一步
61 i = i + 1
62 j = j + 1
63 Next
64 'xlsheet.PrintOut '打印工作表
65 xlBook.SaveAs (sFile)
66 xlBook.Close (True) '关闭工作簿
67 xlApp.Quit '结束EXCEL对象
68 Set xlApp = Nothing '释放xlApp对象
69 MsgBox "共有" & rs.RecordCount & "条记录被导出", vbInformation
70 rs.Close
71 Set rs = Nothing
72 Screen.MousePointer = vbDefault
73 Exit Sub
74
75
76
77 Err_Proc:
78 Screen.MousePointer = vbDefault
79 MsgBox "请确认您的电脑已安装Excel!", vbExclamation, "提示"
80
81
82
83 End Sub
有关更多的技术分享,大家可以加入我们的技术群,进行源码的分享。
欢迎加入技术分享群:238916811