VB6操作EXCEL导入数据库

Private Function FunImpExcel(ByVal strFilePath As String) As Integer

'Excel文件格式

'第一行为表名,第二行为列名,其余行均为数据

On Error GoTo hErr

Dim objConn As New ADODB.Connection

Dim objRS As New ADODB.Recordset

If Dir(strFilePath) = "" Then

MsgBox "文件不存在",vbCritical,"错误"

Exit Function

End If

'定义Excel对象

Dim xlsApp As Object

Dim xlsWb As Object

Dim xlsWs As Object

Set xlsApp = CreateObject("Excel.Application") '建立excel对象

Set xlsWb = xlsApp.Workbooks.Open(strFilePath) '要打开的文档路径

Set xlsWs = xlsWb.Worksheets(1) '选工作表,有多张表时,可以参考此,变换序号指定不同的表

xlsWs.Activate

xlsApp.Visible = false '隐藏,否则会在界面显示出来

'Excel表格的行数和列数

Dim iRowCnt As Integer

Dim iColCnt As Integer

iRowCnt = xlsWs.UsedRange.Rows.Count '这个并不完全准确,在操作数据时要设置退出条件

iColCnt = xlsWs.UsedRange.Columns.Count'这个并不完全准确,在操作数据时要设置退出条件

'下面要根据具体的表格情况决定,这里前面两行是表名和列名

If iRowCnt <= 2 Then

MsgBox "没有需要导入的明细数据","错误"

GoTo hErr

End If

'从第3行开始是明细数据

For i = 3 To iRowCnt

'设置退出条件

If Trim$(xlsWs.Cells(i,3).Value) = "" Then

mdlPub.debug_print "on date found anymore:" & i

Exit For

End If

'第一条数据时,先打开数据库,这里是access

if 3 = i then

'数据库访问操作可以封装成一个公共的函数或过程

Dim strConn as String

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=true;Data Source=test.mdb"

objConn.CursorLocation = adUseClient

objConn.Open strConn

strSQL = "select * from [要导入的表名] where 1=2 "

objRS.CursorLocation = adUseClient

objRS.Open strSQL,objConn,adOpenKeyset,adLockOptimistic

End if

'新增一条记录,注意各个字段的数据类型匹配问题,

'最好全部统一先转化为字符串,再转化为对应的类型

objRS.AddNew

objRS.Fields("数据库列名1") = Trim(CStr(xlsWs.Cells(i,1).Value))

objRS.Fields("数据库列名2") = Trim(CStr(xlsWs.Cells(i,2).Value))

'.....

objRS.Fields("数据库列名n") = CLng(Trim(CStr(xlsWs.Cells(i,n).Value)))

'如果Excel列名与要导入的数据库列能按顺序一一对应,

'则可以按以下方式,但要解决不同字段的数据格式匹配问题,比较麻烦

'For j = 0 To RS.Fields.Count - 1

' RS.Fields(j) = Trim(CStr(xlsWs.Cells(i,1).Value))

'Next

'更新到数据库

objRS.Update

Next i

objRS.Close

objConn.Close

Set objRS = Nothing

Set objConn = Nothing

xlsWb.Close '关闭excel文件

xlsApp.Quit '退出excel

Set xlsWs = Nothing

Set xlsWb = Nothing

Set xlsApp = Nothing

FunImpExcel = 0'成功则返回0

Exit Function

hErr:

ImpExcelCertDtl = -1 '失败则返回1

If Not (xlsWb Is Nothing) Then xlsWb.Close '关闭文件

If Not (xlsApp Is Nothing) Then xlsApp.Quit

Set xlsWs = Nothing

Set xlsWb = Nothing

Set xlsApp = Nothing

MsgBox "文件导入失败","错误"

End Function

对于一个Excel文件中多个表格的情况,可以循环逐一导入。

为了方便,对于excel对象的定义可以明确一些,这样能自动弹出提示,方便编码。

如:

Dim xlsApp As New Excel.Application

Dim xlsWb As Excel.Workbook

Dim xlsWs As Excel.Worksheet

但这样定义时需要在工程中引入excel组件。

====================================================

将数据导出至Excel

'-----------------

'从数据从数据库导出至excel,并弹出保存文件对话框

'-------------------

Private Function FunExpExcel()

On Error GoTo hErr

'注意引用excel组件,也可以直接定义为对象object

Dim xlsApp As New Excel.Application

Dim xlsWb As Excel.Workbook

Dim xlsWs As Excel.Worksheet

Dim strFilePath As String

Dim strFileNm As String

Dim iColIdx As Integer

Dim objTmp As Object

'创建excel

Set xlsApp = CreateObject("Excel.Application")

xlsApp.Visible = False

xlsApp.SheetsInNewWorkbook = 1 '定义表格个数

'新增一张表格, 这里可以增加多张表

Set xlsWb = xlsApp.Workbooks.Add

'指定sheet,指定第一张,如果有多张,可以具体指定哪一个

Set xlsWs = xlsWb.Worksheets(1)

'xlsApp.Visible = False

xlsWs.Activate

xlsWs.Select

'第一行为标题

xlsWs.Cells(1,1).Value = "表格标题"

'第二行为列名,第一列列名“序号”

xlsWs.Cells(2,1).Value = "序号"

....

xlsWs.Cells(2,n).Value = "序号"

'如果是datagrid,可以直接用对应的列名

'For iColIdx = 0 To Me.grdQryInst.Columns.Count - 1

' xlsWs.Cells(2,iColIdx + 2).Value = Me.datagrid1.Columns(iColIdx).Caption

'Next

'设置第一列序号为数字格式

xlsWs.Columns("A:A").NumberFormatLocal = "0_ "

'设置其它列为文本格式,函数NumToChar26能将数字转化为对应的excel列名,如2->B,3->C,自已实现

'xlsWs.Columns(NumToChar26(2) & ":" & NumToChar26(Me.datagrid1.Columns.Count)).NumberFormatLocal = "@"

'----这里打开数据库,查询数据略,自己实现,如果是datagrid,则可以按下面的方法

'Dim RS As ADODB.Recordset

'Set RS = Me.datagrid1.DataSource

'从第三行开始写明细数据

RS.MoveFirst

For iRowIdx = 0 To RS.RecordCount - 1

xlsWs.Cells(iRowIdx + 3,1).Value = CStr(iRowIdx + 1)

'对第一行,按顺序逐列写单元格

For iColIdx = 0 To RS.Fields.Count - 1

xlsWs.Cells(iRowIdx + 3,iColIdx + 2).Value = RS.Fields(iColIdx).Value

Next

RS.MoveNext

Next

'-----写完数据,下面设置导出excel格式

'标题格式设置

Set objTmp = xlsWs.Range(xlsWs.Cells(1,1),xlsWs.Cells(1,iColIdx + 2 - 1))

objTmp.Merge '合并单元格

'标题排版

With objTmp

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

End With

With objTmp.Font

.Name = "宋体"

.Size = 18

End With

'第2行开始,设置边框,字体与标题不同

Set objTmp = xlsApp.Range(xlsWs.Cells(2,xlsWs.Cells(iRowIdx + 3 - 1,iColIdx + 2 - 1))

With objTmp.Font

.Name = "宋体"

.Size = 10

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

objTmp.Borders(xlDiagonalDown).LineStyle = xlNone

objTmp.Borders(xlDiagonalUp).LineStyle = xlNone

With objTmp.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With objTmp.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With objTmp.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With objTmp.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With objTmp.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

With objTmp.Borders(xlInsideHorizontal)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

'设置列宽,自动扩展

For iColIdx = 1 To Me.grdQryInst.Columns.Count + 1

xlsWs.Columns(NumToChar26(iColIdx) & ":" & NumToChar26(iColIdx)).EntireColumn.AutoFit

Next

'弹出保存文件对话框,要在窗体上增加commondialog控件,控件命名dlgFile

Me.dlgFile.DialogTitle = "保存至"

Me.dlgFile.Flags = &H200

Me.dlgFile.DefaultExt = ".xls"

Me.dlgFile.Filter = "Excel数据文件 *.xls|*.xls" '过滤器

Me.dlgFile.InitDir = App.Path

Me.dlgFile.FileName = strFileNm & ".xls"

Me.dlgFile.ShowSave

If Err <> 32755 Then strFilePath = dlgFile.FileName

If "" <> strFilePath Then

xlsWb.SaveAs strFilePath

Else

mdlPub.ShowInfo "文件未保存"

End If

xlsWb.Close

xlsApp.Quit

Set xlsWs = Nothing

Set xlsWb = Nothing

Set xlsApp = Nothing

FunExpExcel = 0 '成功则返回0

mdlPub.ShowInfo "已保存至" & strFilePath

Exit Sub

hErr:

FunExpExcel = -1'失败则返回1

If Err.Number <> 0 Then mdlPub.ShowErrMsg "导出错"

If Not (xlsWb Is Nothing) Then Set xlsWs = Nothing

If Not (xlsWb Is Nothing) Then

xlsWb.Close

Set xlsWb = Nothing

End If

If Not (xlsWb Is Nothing) Then

xlsApp.Quit

Set xlsApp = Nothing

End If

End Function

=================================

h注意,在使用VB操作excel过程中,对于excel对象的引用都要用到本地定义的excel三个变量xlsApp,xlsWb,xlsWs之一做前缀,否则, 会出现残留EXCEL进程的情况,下次操作EXCEL时会报错。原因是没有加本地定义的变量做前缀,而使用了EXCEl的全局变量形式,xlsWb.Close,xlsApp.Quit语句只是退出局部EXCEL,无法退出全局EXCEL。

vb6将excel数据导入mysql_VB6操作EXCEL导入数据库相关推荐

  1. python如何操作excel数据_Python如何操作Excel

    以上可以根据需求的不同,选择合适的工具,现在给大家主要介绍最常用的xlrd&xlwt&xlutils系统工具的使用 1. xlrd&xlwt&xlutils介绍 xlr ...

  2. python导入excel数据-Python导入数值型Excel数据并生成矩阵操作

    riginal_Data 因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理. Import_Data import numpy as np impor ...

  3. python将excel导入生成矩阵_Python导入数值型Excel数据并生成矩阵操作

    riginal_Data 因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理. Import_Data import numpy as np impor ...

  4. python sqlserver 数据操作_python对Excel数据进行读写操作

    python对Excel数据进行读写操作 将学习到的基础操作记录在这里,便与复习查看 1.python读取Excel工作簿.工作表 import xlrd # 读取工作簿 wb=xlrd.open_w ...

  5. python对Excel数据进行读写操作

    python对Excel数据进行读写操作 将学习到的基础操作记录在这里,便与复习查看 1.python读取Excel工作簿.工作表 import xlrd # 读取工作簿 wb=xlrd.open_w ...

  6. C# 导入excel数据,解决关闭excel后不能释放资源的问题

    C# 导入excel数据,解决关闭excel后不能释放资源的问题 参考文章: (1)C# 导入excel数据,解决关闭excel后不能释放资源的问题 (2)https://www.cnblogs.co ...

  7. python excel详解_python操作excel详解

    前提: python操作excel需要使用的模块有xlrd.xlwt.xlutils.对excel进行读.写.更新操作.操作excel时需要先导入这些模块,demo如下: excel-读操作知识点: ...

  8. python与excel做数据可视化-python操作Excel、读取CVS与数据可视化

    1. python操作Excel python操作Excel有多种module可以实现(xlrd.xlwt.xlutils.openpyxl.xlsxwriter),本文使用xlsxwriter这个m ...

  9. java导入excel数据_java使用POI批量导入excel数据的方法

    一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二.所需jar包: 三.简单的一个读取e ...

最新文章

  1. 这个B站up主太硬核了!纯手工打造AI小电视:硬件自己焊接,驱动代码全手写...
  2. windows下mysql-8.0.11-winx64解压版配置
  3. python用编程软件_Python编程工具pycharm的使用
  4. ClickHouse【环境搭建 01】Linux环境单机版在线安装 Code:210.DB::NetException + Init script is already running 问题处理
  5. Git之回退已经提交到远程仓库的代码(已经push的代码)
  6. java 导入导出 插件_Java最优的Excel导入/导出工具开发,你用过吗?
  7. mysql整站源码安装_MySQL入门01-MySQL源码安装
  8. 数据库-MySQL-Java数据库连接-JDBC
  9. php mysql odbc_使用PHP和MySQL专用接口以及ODBC接口
  10. 三、地址族与数据序列
  11. 怎么降低照片大小kb?
  12. android依赖本地工程排除,Android Gradle依赖项排除(Android Gradle dependency exclude)
  13. 基于Docker的交互式人脸识别应用
  14. C++面试题总结,一篇就够了
  15. 苏索轰世界波 米兰2:0热那亚重返意甲前四
  16. Vue定制iview的表格头格式,通用版
  17. 我们用4行代码节省了100万 相见恨晚的PCDN
  18. php hook类,基于 CodeIgniter 构建 JWT RESTfull API Server
  19. 无向图的最大团/最大独立集
  20. 御龙在天以前服务器信息,御龙在天

热门文章

  1. Verilog有符号数运算,四舍五入,饱和截位
  2. 服务器系统如何校验md5值,怎么验证md5-NTP的MD5加密
  3. MS SQL Server 2005网络服务器配置方法
  4. 机房收费系统系列五:报表
  5. java编程JDK安装
  6. [摩尔庄园]庄稼快速浇水算法
  7. Ubuntu 打包软件
  8. 程序员如何开启职业第二春?年薪50w+的金融IT岗了解一下
  9. 【收藏】华为设备维护
  10. SwiftUI onReceive 基础教程