导出SqlServer、Access、DBase数据到Excel表

水如烟 2008-03-06 11:36:17
利用Excel.QueryTables

...全文
215 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobyang520 2011-09-01
  • 打赏
  • 举报
回复
对你的景仰有如滔滔江水绵延不绝!
水如烟 2008-03-11
  • 打赏
  • 举报
回复
你不觉得编程就是为了实现自我控制吗?
SYUEHOKO 2008-03-11
  • 打赏
  • 举报
回复
现在对数据库操作的工具已经很完善了.用这种方式不觉得繁琐吗?
_NET2004 2008-03-09
  • 打赏
  • 举报
回复
楼上的绝对是个弓虽人。
水如烟 2008-03-08
  • 打赏
  • 举报
回复
最后,可以做成这样:导出数据库所有的表

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t As New DatabaseExcel(New SqlDatabase("(local)", "AdventureWorks"))
t.ImportAllTables()
End Sub

Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim t As New DatabaseExcel(New DBaseDatabase("z:\"))
t.ImportAllTables()
End Sub

Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim t As New DatabaseExcel(New AccessDatabase("g:\test.mdb"))
t.ImportAllTables()
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim tran As New AccessTranExcel

tran.CreateOrOpenWorkbook("C:\Northwind.xls") '确定xls文件
tran.CreateOrSelectWorksheet("产品") '确定存放数据所在的工作表名称

Dim mResult As String '存放导出过程的消息

mResult = tran.Import("C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb", "SELECT * FROM 产品")

If mResult = "" Then
Console.WriteLine("成功")
Else
Console.WriteLine("失败,原因:" & mResult)
End If

tran.Save() '保存
tran.Close() '关闭excel
End Sub
End Class
水如烟 2008-03-08
  • 打赏
  • 举报
回复
使用方法,以ACCESS为例

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim tran As New AccessTranExcel

tran.CreateOrOpenWorkbook("C:\Northwind.xls") '确定xls文件
tran.CreateOrSelectWorksheet("产品") '确定存放数据所在的工作表名称

Dim mResult As String '存放导出过程的消息

mResult = tran.Import("C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb", "SELECT * FROM 产品")

If mResult = "" Then
Console.WriteLine("成功")
Else
Console.WriteLine("失败,原因:" & mResult)
End If

tran.Save() '保存
tran.Close() '关闭excel
End Sub
水如烟 2008-03-06
  • 打赏
  • 举报
回复
DBaseTranExcel.vb
Public Class DBaseTranExcel
Inherits DbTranExcel

Protected Overloads Overrides Function GetConnectionString(ByVal dataSource As String, ByVal database As String) As String
Return String.Format("ODBC;DRIVER={{Microsoft dBase Driver (*.dbf)}};DriverId=533;FIL=dBase 5.0;DefaultDir={0};DBQ={1};uid=admin;", dataSource, database)
End Function

Protected Overloads Overrides Function GetConnectionString(ByVal dataSource As String, ByVal database As String, ByVal userID As String, ByVal Password As String) As String
Return String.Format("ODBC;DRIVER={{Microsoft dBase Driver (*.dbf)}};DriverId=533;FIL=dBase 5.0;DefaultDir={0};DBQ={1};uid={2};pwd={3};", dataSource, database, userID, Password)
End Function


''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Public Overloads Function Import(ByVal path As String, ByVal selectstring As String) As String
Return Me.Import(Nothing, path, selectstring)
End Function

End Class
水如烟 2008-03-06
  • 打赏
  • 举报
回复
AccessTranExcel.vb
'不考虑工作组文件
Public Class AccessTranExcel
Inherits DbTranExcel

Protected Overloads Overrides Function GetConnectionString(ByVal dataSource As String, ByVal database As String) As String
Return String.Format("ODBC;Driver={{Microsoft Access Driver (*.mdb)}};DefaultDir={0};DBQ={1};uid=admin;", dataSource, database)
End Function

Protected Overloads Overrides Function GetConnectionString(ByVal dataSource As String, ByVal database As String, ByVal userID As String, ByVal Password As String) As String
Return String.Format("ODBC;DRIVER={{Microsoft Access Driver (*.mdb)}};DefaultDir={0};DBQ={1};uid={2};pwd={3};", dataSource, database, userID, Password)
End Function

''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Public Overloads Function Import(ByVal mdbFile As String, ByVal selectstring As String) As String
Return Me.Import(mdbFile, Nothing, selectstring)
End Function

''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Public Overloads Function Import(ByVal mdbFile As String, ByVal Password As String, ByVal selectString As String) As String
Return Me.Import(Nothing, mdbFile, "admin", Password, selectString)
End Function

''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Public Overloads Function Import(ByVal mdbFile As String, ByVal userID As String, ByVal Password As String, ByVal selectString As String) As String
Return Me.Import(Nothing, mdbFile, userID, Password, selectString)
End Function
End Class
水如烟 2008-03-06
  • 打赏
  • 举报
回复
SqlTranExcel.vb

Public Class SqlTranExcel
Inherits DbTranExcel

Protected Overloads Overrides Function GetConnectionString(ByVal dataSource As String, ByVal database As String) As String
Return String.Format("ODBC;DRIVER=SQL Server;SERVER={0};DATABASE={1};Trusted_Connection=Yes;", dataSource, database)
End Function

Protected Overloads Overrides Function GetConnectionString(ByVal dataSource As String, ByVal database As String, ByVal userID As String, ByVal Password As String) As String
Return String.Format("ODBC;DRIVER=SQL Server;SERVER={0};DATABASE={1};uid={2};pwd={3};", dataSource, database, userID, Password)
End Function

End Class
水如烟 2008-03-06
  • 打赏
  • 举报
回复

DbTranExcel.vb
Option Strict Off

Imports System.IO
Imports System.Runtime.InteropServices

Public MustInherit Class DbTranExcel
Implements IDisposable

Private gApplication As Object = CreateObject("Excel.Application")

Private Property Application() As Object
Get
Return gApplication
End Get
Set(ByVal value As Object)
gApplication = value
End Set
End Property

Private ReadOnly Property ActiveWorkbook() As Object
Get
Return Application.ActiveWorkbook
End Get
End Property

Private ReadOnly Property ActiveSheet() As Object
Get
Return Application.ActiveSheet
End Get
End Property

Public Property Visible() As Boolean
Get
Return Me.Application.Visible
End Get
Set(ByVal value As Boolean)
Me.Application.Visible = value
End Set
End Property

Public Sub CreateOrOpenWorkbook(ByVal xlsFile As String)

If Me.Application.Workbooks.Count > 0 Then
Throw New Exception("仅接受一份工作簿")
End If

If Not xlsFile.ToLower.EndsWith(".xls") Then
xlsFile += ".xls"
End If

If xlsFile.IndexOf("\") = -1 Then
xlsFile = Path.Combine(Me.Application.DefaultFilePath, xlsFile)
End If

If File.Exists(xlsFile) Then
Me.Application.Workbooks.Open(xlsFile)
Else
Me.Application.Workbooks.Add.SaveAs(xlsFile)
End If
End Sub

Public Sub Save()
If Me.Application.Workbooks.Count = 0 Then Return

Me.ActiveWorkbook.Save()
End Sub

Public Sub Close()
Me.Dispose()
End Sub

Public Sub CreateOrSelectWorksheet(ByVal sheetName As String)
Dim sh As Object = GetWorksheet(sheetName)

If sh IsNot Nothing Then
sh.Activate()
Else
sh = Me.ActiveWorkbook.Sheets.Add()
Try
sh.Name = sheetName '工作表称最长只有31个字符
Catch ex As Exception
End Try
End If
End Sub

''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Private Function InternalImport(ByVal connectionString As String, ByVal selectstring As String) As String
Me.ActiveSheet.Cells.Clear()

Dim msg As String = String.Empty

Try
With Me.ActiveSheet.QueryTables.Add(Connection:=connectionString, Destination:=Me.ActiveSheet.Range("A1"))
.CommandText = New String() {selectstring}
.Refresh(BackgroundQuery:=False)
End With
Catch ex As Exception
msg = ex.Message
End Try

If Me.ActiveSheet.QueryTables.Count > 0 Then Me.ActiveSheet.QueryTables(1).Delete()

Return msg
End Function

Private Function GetWorksheet(ByVal sheetName As String) As Object
Dim sh As Object = Nothing

For i As Integer = 1 To Me.ActiveWorkbook.Sheets.Count
sh = Me.ActiveWorkbook.Sheets(i)

If String.Compare(sh.Name, sheetName, True) = 0 Then Exit For

sh = Nothing
Next

Return sh
End Function

Private disposedValue As Boolean = False ' 检测冗余的调用

' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: 释放其他状态(托管对象)。
End If

' TODO: 释放您自己的状态(非托管对象)。
' TODO: 将大型字段设置为 null。

If Me.Application IsNot Nothing Then
Try
Me.Application.Quit()
Catch ex As Exception
End Try

If Me.Application IsNot Nothing Then
Try
Marshal.ReleaseComObject(Me.Application)
Me.Application = Nothing
Catch ex As Exception
End Try
End If
End If
End If
Me.disposedValue = True
End Sub

#Region " IDisposable Support "
' Visual Basic 添加此代码是为了正确实现可处置模式。
Public Sub Dispose() Implements IDisposable.Dispose
' 不要更改此代码。请将清理代码放入上面的 Dispose(ByVal disposing As Boolean) 中。
Dispose(True)
GC.SuppressFinalize(Me)
GC.Collect(2)
End Sub
#End Region


Protected MustOverride Function GetConnectionString(ByVal dataSource As String, ByVal database As String) As String
Protected MustOverride Function GetConnectionString(ByVal dataSource As String, ByVal database As String, ByVal userID As String, ByVal Password As String) As String

''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Public Overloads Function Import(ByVal dataSourceOrDefaultDir As String, ByVal catalogOrDbq As String, ByVal selectstring As String) As String
Dim connectionString As String = Me.GetConnectionString(dataSourceOrDefaultDir, catalogOrDbq)
Return Me.InternalImport(connectionString, selectstring)
End Function

''' <summary>
''' 如正常,返回为空字符;如异常,返回异常消息
''' </summary>
Public Overloads Function Import(ByVal dataSourceOrDefaultDir As String, ByVal catalogOrDbq As String, ByVal userID As String, ByVal Password As String, ByVal selectString As String) As String
Dim connectionString As String = Me.GetConnectionString(dataSourceOrDefaultDir, catalogOrDbq, userID, Password)
Return Me.InternalImport(connectionString, selectString)
End Function

End Class
Jetpack ActiveX控件集合 以很小的努力和少许代码就能提高任何基于开发语言的 COM 功能。数据库开发者可以通过 Jetpack 控件使用任何他们熟悉的语言构建客户端应用程序,包括 Microsoft Visual Basic, Visual C++,Visual J++,Borland Delphi,Powersoft Powerbuilder, 和 Micro Focus Object Cobol等。 Jetpack ActiveX控件集合 由11个不同的控件组成,每一个控件可以单独添加到应用程序,这些控件共享 Jetpack 里的部分代码,这避免了复杂的代码。 Jetpack ActiveX控件集合的特点及集成的部分控件: Design控件:用 Design 控件可以创建平台,修改已存在的平台。该界面能轻松浏览,编辑或创建域和索引,支持基于单域的索引和基于多域的索引。当对一个域重命名、修改或拷贝时,将保存该域的数据; Export (JET+ OLEDB)控件: Export Jet 能导出数据到以下数据库类型(要求安装 ISAM或 ODBC 驱动):Jet Engine 数据库、dBase (III, IV 和 V 数据库)、Paradox 3.x, 4.x 和 5.x 数据库、Excel 3.0, 4.0, 95 和 97 空白格程序、HTML 文件、Text 文件和ODBC 远程数据库如 Microsoft SQL Server, Sybase SQL Server, ORACLE Server, 和 Ingres Server。还有其他任何可安装的 ISAM 数据库;Export OLEDB 可导出到任何OLEDB 提供者; Find/Findx (JET + OLEDB)控件: Find 控件向任何数据库应用程序添加强大的搜索功能,只需要把 Find控件连接到数据控件就能搜索符合搜索标准的第一个、前一个、后一个和最后一个记录; Import控件: 可以从以下数据库类型中导入数据(要求安装 ISAM或 ODBC 驱动):Jet Engine 数据库、dBase (III, IV 和 V 数据库)、Paradox 3.x, 4.x 和 5.x 数据库、Excel 3.0, 4.0, 95 和 97 空白格程序、Text 文件和ODBC 远程数据库如 Microsoft SQL Server, Sybase SQL Server, ORACLE Server, 和 Ingres Server。还有其他任何可安装的 ISAM 数据库; Maint控件: Maint 对任何 Jet 数据库应用程序都是很重要的,能对任何 Microsoft Jet数据库进行备分、存储、修复、压缩和转换; Organiser控件: Organiser 能轻松管理数据库里的对象,两个数据库的平台和搜索请求将在一个分离的屏幕内相邻显示。使用 Organiser 可以从一个数据库导入数据或把数据导出到另一个数据库,数据格式自动转换。支持的数据库类型有:Microsoft Access, Excel, dBase, Paradox, Text, SQL Server 等等; 还包括Queryer/Queryerx,Report和ROOM控件。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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