VB中把SQL数据导出到EXCEL该怎么做?

时间:2021-05-12 09:26:50
在我的程序中数据显示在datagrid中,现在我想它们导成一个excel文件,请大家帮忙该怎么做?
谢谢!!!!!!!!!

11 个解决方案

#1


我想实现在MSflexgrid查询结果导出到EXCEL。找到代码如下:
Private Sub Command1_Click()
  Dim Xlapp As Object
    Dim i As Long
    Dim j  As Long
    Dim Header As String
    Dim xlsheet As Excel.Worksheet
    Set Xlapp = CreateObject("excel.application")
    Xlapp.Workbooks.Add
    Xlapp.Visible = True
    Set xlsheet = Xlapp.Worksheets.Add
    With xlsheet
        '      .Range("C1") = Header
        '      .Range("C1").Font.Size = 20
        '      .Range("A2") = "´Ó" & DTPicker1.Value & "µ½" & DTPicker2.Value & "Ϊֹ:"
        For i = 1 To msgList.Rows - 1
            For j = 0 To msgList.Cols - 1
                .Cells(i + 1, j + 1) = msgList.TextMatrix(i, j)
            Next
        Next
    End With
    Set xlsheet = Nothing
    Set Xlapp = Nothing
End Sub

#2


请问msgList是什么啊?是MSflexgrid控件名吗?
我的datagrid的属性怎么和你的不一样?rows是row,cols是col,没有textmatrix这个属性
我试了一下,能调出excel程序,但是数据没插进去

#3


上面的程序是通的,应该好用,可是我该怎么把msflexgrid换成datagrid呢?
它们的属性值不一样啊,大家快点帮帮我吧

#4


一样的,只要你懂vba就可以了

#5


请告诉我那三个属性都是什么?

#6


Dim Xlapp As Object
    Dim i As Long
    Dim j  As Long
    Dim Header As String
    Dim xlssheet As New Excel.Worksheet
    Dim xlsbook As New Excel.Workbook
    Set Xlapp = CreateObject("excel.application")
    'Set xlsbook = New Excel.Workbook
    Set xlsbook = Excel.Workbooks.Open(App.Path & "\aa.xls")
    Set xlssheet = xlsbook.Worksheets.Add
    'Xlapp.Workbooks.Add
    'Xlapp.Visible = True
    'Set xlsheet = Xlapp.Worksheets.Add
    With xlssheet
       .Range("A1").CopyFromRecordset DataGrid1.DataSource
        
    End With
    xlsbook.Save
    xlsbook.Close
    Set xlssheet = Nothing
    Set xlsbook = Nothing
    Set Xlapp = Nothing
这样你试一试,看行吗?

#7


来个简单的SQL语句,不需要挂EXCEL
SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]

#8


谢谢大家,我试一试

#9


阿榕,不行,说“类不支持自动化或不支持期望的接口”
而且你的这种方法得有前提,那就是事先得手动新建一个excel文件,感觉不太通用

#10


还是dm和弦的方法好,可以自动建立一个excel文件,之后自已可以选择保存还是打印,可我就是不知道该怎么把其中的控件变成datagrid,大家帮帮忙吧

#11


没啥办法,你换一个方法吧
专栏作品
VB6 中将数据导出到 Excel 提速之法
李洪根 
--------------------------------------------------------------------------------

Excel 是一个非常优秀的报表制作软件,用VBA可以控制其生成优秀的报表,本文通过添加查询语句的方法,即用Excel中的获取外部数据的功能将数据很快地从一个查询语句中捕获到EXCEL中,比起往每个CELL里写数据的方法提高许多倍。
在程序中引用Microsoft Excel 9.0 Object Library,将下文加入到一个模块中,窗体中调用如下ExporToExcel("select * from table")。则实现快速将数据导出到EXCEL中。
 
Public Function ExporToExcel(strOpen As String)
'*********************************************************
'* 名称:ExporToExcel
'* 功能:导出数据到EXCEL
'* 用法:ExporToExcel(sql查询字符串)
'*********************************************************
Dim Rs_Data As New ADODB.Recordset
Dim Irowcount As Integer
Dim Icolcount As Integer
    
    Dim xlApp As New Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlQuery As Excel.QueryTable
    
    With Rs_Data
        If .State = adStateOpen Then
            .Close
        End If
        .ActiveConnection = Cn
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .Source = strOpen
        .Open
    End With
    With Rs_Data
        If .RecordCount < 1 Then
            MsgBox ("没有记录!")
            Exit Function
        End If
        '记录总数
        Irowcount = .RecordCount
        '字段总数
        Icolcount = .Fields.Count
    End With
    
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = Nothing
    Set xlSheet = Nothing
    Set xlBook = xlApp.Workbooks().Add
    Set xlSheet = xlBook.Worksheets("sheet1")
    xlApp.Visible = True
    
    '添加查询语句,导入EXCEL数据
    Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
    
    With xlQuery
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
    End With
    
    xlQuery.FieldNames = True '显示字段名
    xlQuery.Refresh
    
    With xlSheet
        .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
        '设标题为黑体字
        .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
        '标题字体加粗
        .Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
        '设表格边框样式
    End With
    
    With xlSheet.PageSetup
        .LeftHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10公司名称:"   ' & Gsmc
        .CenterHeader = "&""楷体_GB2312,常规""公司人员情况表&""宋体,常规""" & Chr(10) & "&""楷体_GB2312,常规""&10日 期:"
        .RightHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10单位:"
        .LeftFooter = "&""楷体_GB2312,常规""&10制表人:"
        .CenterFooter = "&""楷体_GB2312,常规""&10制表日期:"
        .RightFooter = "&""楷体_GB2312,常规""&10第&P页 共&N页"
    End With
    
    xlApp.Application.Visible = True
    Set xlApp = Nothing  '"交还控制给Excel
    Set xlBook = Nothing
    Set xlSheet = Nothing
End Function

注::在程序中引用'Microsoft Excel 9.0 Object Library'和ADO对象,机器必装Excel 2000
本程序在Windows 98/2000,VB 6 下运行通过。

#1


我想实现在MSflexgrid查询结果导出到EXCEL。找到代码如下:
Private Sub Command1_Click()
  Dim Xlapp As Object
    Dim i As Long
    Dim j  As Long
    Dim Header As String
    Dim xlsheet As Excel.Worksheet
    Set Xlapp = CreateObject("excel.application")
    Xlapp.Workbooks.Add
    Xlapp.Visible = True
    Set xlsheet = Xlapp.Worksheets.Add
    With xlsheet
        '      .Range("C1") = Header
        '      .Range("C1").Font.Size = 20
        '      .Range("A2") = "&acute;&Oacute;" & DTPicker1.Value & "&micro;&frac12;" & DTPicker2.Value & "&Icirc;&ordf;&Ouml;&sup1;:"
        For i = 1 To msgList.Rows - 1
            For j = 0 To msgList.Cols - 1
                .Cells(i + 1, j + 1) = msgList.TextMatrix(i, j)
            Next
        Next
    End With
    Set xlsheet = Nothing
    Set Xlapp = Nothing
End Sub

#2


请问msgList是什么啊?是MSflexgrid控件名吗?
我的datagrid的属性怎么和你的不一样?rows是row,cols是col,没有textmatrix这个属性
我试了一下,能调出excel程序,但是数据没插进去

#3


上面的程序是通的,应该好用,可是我该怎么把msflexgrid换成datagrid呢?
它们的属性值不一样啊,大家快点帮帮我吧

#4


一样的,只要你懂vba就可以了

#5


请告诉我那三个属性都是什么?

#6


Dim Xlapp As Object
    Dim i As Long
    Dim j  As Long
    Dim Header As String
    Dim xlssheet As New Excel.Worksheet
    Dim xlsbook As New Excel.Workbook
    Set Xlapp = CreateObject("excel.application")
    'Set xlsbook = New Excel.Workbook
    Set xlsbook = Excel.Workbooks.Open(App.Path & "\aa.xls")
    Set xlssheet = xlsbook.Worksheets.Add
    'Xlapp.Workbooks.Add
    'Xlapp.Visible = True
    'Set xlsheet = Xlapp.Worksheets.Add
    With xlssheet
       .Range("A1").CopyFromRecordset DataGrid1.DataSource
        
    End With
    xlsbook.Save
    xlsbook.Close
    Set xlssheet = Nothing
    Set xlsbook = Nothing
    Set Xlapp = Nothing
这样你试一试,看行吗?

#7


来个简单的SQL语句,不需要挂EXCEL
SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]

#8


谢谢大家,我试一试

#9


阿榕,不行,说“类不支持自动化或不支持期望的接口”
而且你的这种方法得有前提,那就是事先得手动新建一个excel文件,感觉不太通用

#10


还是dm和弦的方法好,可以自动建立一个excel文件,之后自已可以选择保存还是打印,可我就是不知道该怎么把其中的控件变成datagrid,大家帮帮忙吧

#11


没啥办法,你换一个方法吧
专栏作品
VB6 中将数据导出到 Excel 提速之法
李洪根 
--------------------------------------------------------------------------------

Excel 是一个非常优秀的报表制作软件,用VBA可以控制其生成优秀的报表,本文通过添加查询语句的方法,即用Excel中的获取外部数据的功能将数据很快地从一个查询语句中捕获到EXCEL中,比起往每个CELL里写数据的方法提高许多倍。
在程序中引用Microsoft Excel 9.0 Object Library,将下文加入到一个模块中,窗体中调用如下ExporToExcel("select * from table")。则实现快速将数据导出到EXCEL中。
 
Public Function ExporToExcel(strOpen As String)
'*********************************************************
'* 名称:ExporToExcel
'* 功能:导出数据到EXCEL
'* 用法:ExporToExcel(sql查询字符串)
'*********************************************************
Dim Rs_Data As New ADODB.Recordset
Dim Irowcount As Integer
Dim Icolcount As Integer
    
    Dim xlApp As New Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlQuery As Excel.QueryTable
    
    With Rs_Data
        If .State = adStateOpen Then
            .Close
        End If
        .ActiveConnection = Cn
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .Source = strOpen
        .Open
    End With
    With Rs_Data
        If .RecordCount < 1 Then
            MsgBox ("没有记录!")
            Exit Function
        End If
        '记录总数
        Irowcount = .RecordCount
        '字段总数
        Icolcount = .Fields.Count
    End With
    
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = Nothing
    Set xlSheet = Nothing
    Set xlBook = xlApp.Workbooks().Add
    Set xlSheet = xlBook.Worksheets("sheet1")
    xlApp.Visible = True
    
    '添加查询语句,导入EXCEL数据
    Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
    
    With xlQuery
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
    End With
    
    xlQuery.FieldNames = True '显示字段名
    xlQuery.Refresh
    
    With xlSheet
        .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
        '设标题为黑体字
        .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
        '标题字体加粗
        .Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
        '设表格边框样式
    End With
    
    With xlSheet.PageSetup
        .LeftHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10公司名称:"   ' & Gsmc
        .CenterHeader = "&""楷体_GB2312,常规""公司人员情况表&""宋体,常规""" & Chr(10) & "&""楷体_GB2312,常规""&10日 期:"
        .RightHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10单位:"
        .LeftFooter = "&""楷体_GB2312,常规""&10制表人:"
        .CenterFooter = "&""楷体_GB2312,常规""&10制表日期:"
        .RightFooter = "&""楷体_GB2312,常规""&10第&P页 共&N页"
    End With
    
    xlApp.Application.Visible = True
    Set xlApp = Nothing  '"交还控制给Excel
    Set xlBook = Nothing
    Set xlSheet = Nothing
End Function

注::在程序中引用'Microsoft Excel 9.0 Object Library'和ADO对象,机器必装Excel 2000
本程序在Windows 98/2000,VB 6 下运行通过。