在VB中使用数据库打开EXcel文件,通过下面的代码获得它的工作表时,内容与实际工作表不一致?高手请进.

1ssp 2006-03-20 09:58:44
Set RsTable = cnExcel.OpenSchema(adSchemaTables)
Do Until RsTable.EOF
Debug.Print "Table name: " & _
RsTable!TABLE_NAME & vbCr & _
"Table type: " & RsTable!TABLE_TYPE & vbCr
RsTable.MoveNext
Loop
RsTable.Close
问题是:有的EXECL文件没有问题,有的EXECL文件会出现下面的情况:
Table name: 滨洲市$
Table type: TABLE

Table name: 滨洲市$_
Table type: TABLE

Table name: 荷泽市$
Table type: TABLE

Table name: 济南市$
Table type: TABLE

Table name: 聊城市$
Table type: TABLE
上面出现了两次滨洲市,事实上只有一个"滨洲市"工作表.
急用,谢谢
...全文
377 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanro 2006-04-29
  • 打赏
  • 举报
回复
'***********************************************************************/
'* Function Name: ToExcel */
'* Input Arguments: */
'* Out Arguments : */
'* : */
'* Description : */
'* Author : by yarno QQ:84115357 */
'* Date : 2005-11-25 */
'***********************************************************************/
Public Function ToExcel()

On Error GoTo ErrorHandler

Dim exlapp As Excel.Application
Dim exlbook As Excel.Workbook
Set exlapp = CreateObject("Excel.Application")
Set exlbook = exlapp.Workbooks.Add
exlapp.Caption = "数据正在导出......"
exlapp.Visible = True
exlapp.DisplayAlerts = False

Dim exlsheet As Excel.Worksheet


Set exlsheet = exlbook.Worksheets.Add

exlsheet.Activate
Set exlsheet = exlsheet
exlsheet.Name = "我导出的数据"


'设置列宽
exlapp.ActiveSheet.Columns(1).ColumnWidth = 10

exlapp.ActiveSheet.Columns(2).ColumnWidth = 20


StrSql = "你的SQL语句"

Set exl_rs = PubSysCn.Execute(StrSql)

exlsheet.Range("A2").CopyFromRecordset exl_rs

exl_rs.Close
Set exl_rs = Nothing


exlapp.Worksheets("sheet1").Delete
exlapp.Worksheets("sheet2").Delete
exlapp.Worksheets("sheet3").Delete
exlapp.DisplayAlerts = True
exlapp.Caption = "数据导出完毕!!"
exlapp.Visible = True

Set exlapp = Nothing
Set exlbook = Nothing
Set exlsheet = Nothing



Exit Function

ErrorHandler:
MsgBox "EXCEL : " & err.Number & " : " & err.Description
End Function




of123 2006-03-30
  • 打赏
  • 举报
回复
更正:
If SendMessagebyString(Combo1.hWnd, CB_FINDSTRINGEXACT, -1, strTmp) >= 0 Then
of123 2006-03-30
  • 打赏
  • 举报
回复
Excel 作为数据库时就是这样。可以如下解决(利用一个 ComboBox 或 ListBox):

Private Declare Function SendMessagebyString Lib _
"user32" Alias "SendMessageA" (ByVal hWND As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As Long

Private Const LB_FINDSTRINGEXACT = &H1A2 '在 ListBox 中精确查找
Private Const CB_FINDSTRINGEXACT = &H158 '在 ComboBox 中精确查找

Dim strTmp As String
Set RsTable = cnExcel.OpenSchema(adSchemaTables)
Combo1.Clear
Do Until RsTable.EOF
strTmp = Left(RsTable!TABLE_NAME, InStr(RsTable!TABLE_NAME, "$") - 1)
If SendMessagebyString(Combo1.hWnd, CB_FINDSTRINGEXACT, -1, strTmp) > 0 Then
Combo1.AddItem strTmp
Debug.Print "Table name: " & _
RsTable!TABLE_NAME & vbCr & _
"Table type: " & RsTable!TABLE_TYPE & vbCr
End If
RsTable.MoveNext
Loop
RsTable.Close
DawnPine 2006-03-30
  • 打赏
  • 举报
回复
看来是个普遍问题
hhjjhjhj 2006-03-22
  • 打赏
  • 举报
回复
很多情况会出现这现象
如:自定义名称(插入---名称---定义)
列表(数据---列表)
数据透视表
导入外部数据(数据库查询)
等.
faysky2 2006-03-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open App.Path & "\test.xls" '打开Excel文件
Dim i As Integer
For i = 1 To xlApp.Sheets.Count
Debug.Print xlApp.Sheets(i).Name '打印工作表名
Next
xlApp.Quit
Set xlApp = Nothing
End Sub
faysky2 2006-03-22
  • 打赏
  • 举报
回复
用Excel对象来做试试:

Private Sub Command1_Click()
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(App.Path & "\test.xls") '打开Excel文件
Dim i As Integer
For i = 1 To xlApp.Sheets.Count
Debug.Print xlApp.Sheets(i).Name '打印工作表名
Next
xlApp.Quit
Set xlApp = Nothing
End Sub
xinliangyu 2006-03-22
  • 打赏
  • 举报
回复
遇到过类似问题,也没搞清楚是怎么回事。有时工作表名最后两个字符会是“$'”,即货币符号后跟个撇号
Free Spire.XLS for .NET 是e-iceblue公司开发的一款支持对所有Excel格式类型文件进行操作的.NET 控件。它适用于任何类型的应用程序比如ASP.NET Web应用程序或者Windows桌面应用程序。Spire.XLS for .NET允许开发人员创建和管理Excel,而不需要安装Microsoft Excel或者Microsoft Office。相比Microsoft,Spire.XLS for .NET对于开发人员来说是一个更好的选择 - 自动化,安全,稳定,可扩展性延伸,速度快,价格便宜和功能强大。 通过使用Free Spire.XLS for .NET,开发人员可以快速方便的查看,生成,读写以及自定义编辑Excel文件。Spire.XLS for .NET支持Excel 97-2003, Excel 2007, Excel 2010 and Excel 2013。它还支持C#, VB.NET, ASP.NET和 ASP.NET MVC编程语言 作为一款专业,强大,方便易用的控件,Spire.XLS for .NET有一下主要功能: 新建Excel文件,编辑已有的Excel文件,多种保存Excel方式,设置Excel文件属性,文件打印设置,合并,拆分或者拷贝单元格,支持对Excel文件加锁或者加密保护。 Spire.XLS for .NET支持把数据从数据库导出到Excel工作表,或者把数据从Excel数据导入到数据库。 Spire.XLS for .NET 提供强大的功能为开发者设置单元格格式。这次格式化数字,文字缩进,定位调整,设置单元格边线,单元格填充以及保护等。 开发人员可以轻松的利用Spire.XLS for .NET向Excel文件里面写入内容,包括超过530多种的公式,70多种表格,支持插入图片,不同类型的文字,链接,注释甚至VBA等。 Spire.XLS for .NET 还允许开发人员将Excel文件转换成PDF, HTML, CSV, Text, XML以及图片格式。 注:下载包含有Spire.xls.dll文件以及部分Demo, 你可以调用DLL并参照Demo提供的代码处理Excel文档。

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧