乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>ADO</em>连接excel表格,怎样访问数据

<em>ADO</em>连接excel表格,怎样访问数据

作者:乔山办公网日期:

返回目录:excel表格制作


先来个临时存储,再删除,再添加修改好的。具体代码如下:
'//sql语句导出到excel
'//参数:strSQL-传入的sql语句,strTitle-对应sql语句中每列的标题(例如:"编号|名称|规格")
Public Function SQLToExcel(ByVal strSQL As String, ByVal strTitle As String)
Dim rsTemp As ADODB.Recordset
Dim strExcelPath As String '//导出的excel文件路径
Dim arrTemp() As Variant
Dim arrTitle As Variant
Dim lngRows As Long
Dim lngCols As Long
Dim objExcelApp As Object
Dim objExcelWorkBook As Object
Dim objExcelWorkSheet As Object
Dim i As Long
Dim j As Long
On Error GoTo errHandle
If CheckExcel = False Then objInterCont.Tips "请确定已正确安装了Excel软件!": Exit Function
If Trim(strSQL) = "" Then Exit Function
Set rsTemp = mDB.Execute(strSQL)
If rsTemp.BOF And rsTemp.EOF Then
Set rsTemp = Nothing
objInterCont.Tips "没有要导出的数据,请重新选择查询条件!"
Exit Function
End If
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = False
With frmReport.dlgExport '//打开保存对话框
.FileName = ""
.DialogTitle = "请输入Excel文件名称"
.Filter = "Excel Files(*.xls)|*.xls" '//文件类型过虑为excel
.ShowSave
If Trim(.FileName) = "" Then Exit Function
strExcelPath = Trim(.FileName)
If Dir(Trim(.FileName)) <> "" Then '如果存在e799bee5baa6e78988e69d83331文件则提示
If MsgBox("文件已存在,是否替换原文件?", vbYesNo + vbQuestion, "提示") = vbYes Then
Kill Trim(.FileName)
Else
objExcelApp.Quit
Set objExcelApp = Nothing
Set rsTemp = Nothing
Exit Function
End If
End If
End With
Screen.MousePointer = 11
DoEvents
Err.Clear
lngRows = rsTemp.RecordCount
lngCols = rsTemp.Fields.Count
ReDim arrTemp(lngRows - 1, lngCols - 1)
i = 0
rsTemp.MoveFirst
Do While Not rsTemp.EOF
For j = 0 To lngCols - 1
arrTemp(i, j) = rsTemp.Fields(j).Value '//保存数据到数组
Next
rsTemp.MoveNext
i = i + 1
Loop
arrTitle = Split(strTitle, "|") '//保存标题到数组
Set objExcelWorkBook = objExcelApp.Workbooks.Add
Set objExcelWorkSheet = objExcelWorkBook.Worksheets(1) '写入第一个工作簿
With objExcelWorkSheet
.Range(.cells(1, 1), .cells(UBound(arrTemp, 1) + 2, UBound(arrTemp, 2) + 1)).NumberFormatLocal = "@"
.Range(.cells(1, 1), .cells(1, UBound(arrTitle, 1) + 1)).Font.Bold = True '//标题加粗
.Range(.cells(1, 1), .cells(1, UBound(arrTitle, 1) + 1)) = arrTitle '写入excel标题
.Range(.cells(2, 1), .cells(UBound(arrTemp, 1) + 2, UBound(arrTemp, 2) + 1)) = arrTemp '写入excel列内容
.cells.EntireColumn.AutoFit '//自动改变列大小
End With
objExcelWorkBook.SaveAs FileName:= _
strExcelPath, FileFormat:= _
1, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
objExcelApp.Quit

Set objExcelApp = Nothing
Set objExcelWorkBook = Nothing
Set objExcelWorkSheet = Nothing
Set rsTemp = Nothing
Erase arrTemp
Erase arrTitle
SQLToExcel = True
Screen.MousePointer = 0
objInterCont.Tips "导出数据成功!"
Exit Function
errHandle:
SQLToExcel = False
Set objExcelApp = Nothing
Set objExcelWorkBook = Nothing
Set objExcelWorkSheet = Nothing
Set rsTemp = Nothing
Erase arrTemp
Erase arrTitle
Screen.MousePointer = 0
If Err.Number = 75 Then
objInterCont.Tips "所覆盖的Excel文件属性只读,导出失败!"
Exit Function
End If
If Err.Number = 70 Then
objInterCont.Tips "所覆盖的Excel文件已打开,导出失败!"
Exit Function
End If
mobjErrLog.Record Err.Number, Err.Description, "DataOperator.cls", "SQLToExcel"
End Function

在日常生活中,通常有很多表格文件用Excel存放,访问Excel表格的方法很多,在Delphi中可以通过Servers中的ExcelApplication,ExcelWorkBook,ExcelWorkSheet等控件操纵Excel中的数据.但是我们无法用ADO操纵Excel文件中的Sheet,ADO控件会告诉你"[microsoft][OdbC Excel driver]Microsoft Jet 数据库引擎找不到对象'Sheet1'.请确定对象是否存在,并正确地写出它的名称和路径.
那么如何才能正确的操纵Excel呢???
首先用ADO连接Excel,至于怎么连接Excel我想不用我说了吧.
然后这个是个关键:打开Excel,先"插入"->"名称"->"定义",如图:

输入一个名称,如:OK,按"添加"按钮,然后指定引用位置,如图:

最后按"确定",然后存盘,这关键的一步就算完成了.
现在你在Delphi中就可以通过ADOQuery或ADOTable等自由操纵表名为"OK"的表了.

注意:1.你可以在一个Excel文件中定义多个名称,当多个表使用
2.此方法不能用于Excel中的Chart等元素
不用引用也可以,一般就:
set cnn=createobject("adodb.connection")
set rst=createobject("adodb.recordset")

在通过ADO对Excel对象进行连接时(此时Excel则认为是一个数据源),需要配置对Excel数据源对应的连接串,这个连接串中包括了Provider信息(其实类似对数据库进行连接操作时,都需要指定连接字符串),

以下是一行连接串源代码: strConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strExcelFilePath & ";Extended Properties=Excel 12.0" 这里的Provider使用了Microsoft.ACE.OLEDB.12.0,其实除了Microsoft.ACE.OLEDB.12.0,还有Microsoft.Jet.OLEDB.4.0,它们俩者之间有什么联系和区别呢: 共同点:都是做为连接Excel对象的接口引擎 不同点:

对于不同的Excel版本,有两种接e68a84e8a2ad7a64332口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。 Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007。 ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。

相关阅读

  • <em>ADO</em>连接excel表格,怎样访问数据

  • 乔山办公网excel表格制作
  • 先来个临时存储,再删除,再添加修改好的。具体代码如下://sql语句导出到excel//参数:strSQL-传入的sql语句,strTitle-对应sql语句中每列的标题(例如:"编号|名称|规格")Public Function SQL
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网