| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1876 人关注过本帖
标题:请问DATAGRID导出成EXCEL可以做成标准模块,供所有窗体调用吗
只看楼主 加入收藏
ltr3507
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-3-11
结帖率:100%
收藏
 问题点数:0 回复次数:6 
请问DATAGRID导出成EXCEL可以做成标准模块,供所有窗体调用吗
程序有好多窗体,窗体中有DATAGRID控件,客户要求每个DATAGRID都提供引出功能。问题如下:
1、我能否把下面的引出程序做成模块供每个窗体调用,如果能调用话,调用的代码怎么写。
2、我每个DATAGRID中RECORD中的记录集的命名都不相同,不知道如果引出程序可以做成通用模块话会不会有影
响,还有就是每个DATAGRID在声明时Dim CON2 As New Connection, rs4 As New Recordset,其中
Recordset可以做成相同命名吗,比如说都叫RS。如果都命名RS不知道会不会对每个窗体的记录集有影响,例如
下面的导出程序的RECORDSET的命名就是RS4。
3、还有网上说,这样引出程序数据量大会慢,在创建了excel的sheet以后 定义
Mysheet.Cells.CopyFromRecordset   Recordset
这样就把datagrid的rs的记录都放到excel的sheet里面了,这样好象是快了一点,但表头无法导出,请问有什么
好的解决办法吗。
问题比较菜,请各位能给予指教。

导出程序如下:

Private Sub Command2_Click()
Dim I As Integer
Dim j As Integer
Dim m As Integer
Dim n As Integer
'建立excel对象
Set xlApp = CreateObject("excel.application")
Dim xlBook As Object
Dim xlSheet As Object
xlApp.Visible = True
'建立excel对象的工作薄对象
Set xlBook = xlApp.Workbooks.Add
'建立excel对象的工作表对象
Set xlSheet = xlBook.Worksheets(1)
j = DataGrid1.Columns.Count
I = 1
For n = 1 To j - 1
'如果DataGrid1表格中第n列可见,则将其该列的列标题输出至excel表
If DataGrid1.Columns(n).Visible = True Then
'在excel表中的第2行,第i列对应的单元格中显示DataGrid1表格中第n列的列标题
xlSheet.Cells(2, I) = DataGrid1.Columns(n).Caption
I = I + 1
End If
Next n
rs4.MoveFirst
m = 0
Do While Not rs4.EOF
I = 1
For n = 1 To j - 1
'如果ataGrid1表格中第n列可见,则将其该列的值输出至excel表
If DataGrid1.Columns(n).Visible = True Then
'在excel表中的第m+3行,第i列对应的单元格中显示DataGrid1表格中第n列的值
xlSheet.Cells(m + 3, I) = DataGrid1.Columns(n).Value
I = I + 1
End If
Next n
rs4.MoveNext
m = m + 1
Loop
End Sub
搜索更多相关主题的帖子: EXCEL 模块 窗体 DATAGRID 
2009-09-23 12:13
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
Public Sub OutToExcel(TheGrid As DataGrid, TheRS As ADODB.Recordset)
   With TheGrid
     '.............
     xlSheet.Cells(2, I) = TheGrid.Columns(n).Caption
     TheRS.MoveNext
    '...................
   End With
End Sub

在任何窗体中,使用 Call OutToExcel(DataGrid1,Rs4)即可,这是一个思路,你琢磨一下吧

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2009-09-23 12:49
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
3、还有网上说,这样引出程序数据量大会慢,在创建了excel的sheet以后 定义  
Mysheet.Cells.CopyFromRecordset   Recordset  
这样就把datagrid的rs的记录都放到excel的sheet里面了,这样好象是快了一点,但表头无法导出,请问有什么  
好的解决办法吗。

可以考虑这种导出后。再操作 cells ,在最上面插入一行,然后把表头自己写进去。

授人于鱼,不如授人于渔
早已停用QQ了
2009-09-23 23:22
ltr3507
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-3-11
收藏
得分:0 
谢谢楼上两位的答复。我还有个问题:
我的RS是在另一个窗体的,也就是DATAGRID控件只负责显示数据。我现在要做导出数据,就必须要把所有的执行RS查询的记录放到DATAGRID的窗体加载事情里面。
例如:FORM1的”确定“按键事件如下:
Private Sub Command3_Click()  
With con3
.ConnectionString = "dsn=allray;UID=sa;pwd="
.Open
End With                                       '创建数据库联接
Dim fyear As Integer, fbegperiod As Integer, fendperiod As Integer
fyear = Text2.Text
fbegperiod = Text3.Text
fendperiod = Text4.Text
 
Set rs4.ActiveConnection = con3
If form3.Tag <> "" And form3.Tag = "0" Then
sql = "exec T_BALANCE12     " & fyear & "," & fbegperiod & "," & fendperiod & ""
Form4.Label1 = "应收账款余额表"
Form4.Tag = "0"  
ElseIf form3.Tag <> "" And form3.Tag = "1" Then
sql = "exec T_BALANCEYSPJ   " & fyear & "," & fbegperiod & "," & fendperiod & ""
Form4.Label1 = "应收票据余额表"
Form4.Tag = "1"
End If  
rs4.CursorLocation = adUseClient
rs4.CursorType = adOpenStatic
 
Form4.Visible = True
rs4.Open sql, con3
Set Form4.DataGrid1.DataSource = rs4
Form4.DataGrid1.Refresh
END
--------
而DATAGRID在窗体FORM4里面。并且导出按键也在FORM4里面。这样我用上面的程序就无法对RS记录操作了,必须要把查询程序放到窗体FORM4里面,我也能做,但是我的窗体较多,我要修改的地方就多了。以前在网上到有直接对DATAGRID的显示数据引出成EXCEL,但引出的数据总是不全,我也试过了,确实不全,因为DATAGIRD的数据很多。
请问:
1、能不能在不修改程序的情况下,直接对DATAGRID的结果引出,也就是不对RS记录操作。
2、上面一段查询程序是放在执行查询窗体里面的事件里面,还是放在DATAGRID的窗体加载事件里面呢。两种方法有何利弊。
还是再次谢谢两位的答复
2009-09-25 12:15
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
程序代码:
Public Sub OutToExcel(TheGrid As DataGrid) '可以将此过程放在通用模块中 
Set xlApp = CreateObject("excel.application") 
Dim xlBook As Object 
Dim xlSheet As Object 
'建立excel对象的工作薄对象 
Set xlBook = xlApp.Workbooks.Add 
'建立excel对象的工作表对象 
Set xlSheet = xlBook.Worksheets(1) 
'下面将DATAGRID中数据导出到EXCEL中 
With TheGrid 
  .Bookmark = 1 
  For i = 1 To .ApproxCount 
     .Bookmark = i 
        For j = 0 To .Columns.Count - 1 
           xlSheet.Cells(i, j + 1).Value = .Columns(j).Text 
        Next 
  Next 
End With 
 
xlApp.Visible = True 
End Sub 
 
Private Sub Command1_Click() '引用示例
   OutToExcel DataGrid1 
End Sub 

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2009-09-25 13:07
ltr3507
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-3-11
收藏
得分:0 
谢谢,但是DATAGIRD的表头无法导出呀,不知道版主的程序我要做什么修改。还有我的DATAGRID的列可能不固定,比如从第三列后面我可能有5列,也有可能有10列,但这10列的格式都是一样的,都是数字,我怎么样定义他的格式,要求:
居右,并且有固定的列宽,数据为0则显示空白。
2009-09-25 14:42
dhy80801
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:145
注 册:2008-12-14
收藏
得分:0 
因该可以吧,我这试过了
2009-10-02 17:35
快速回复:请问DATAGRID导出成EXCEL可以做成标准模块,供所有窗体调用吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018278 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved