以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  分页加载数据后全部导出  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=90673)

--  作者:huhu
--  发布时间:2016/9/19 16:37:00
--  分页加载数据后全部导出
导出只能导出当前页加载的数据。如果是分页加载的,比如是3页,缺省只能导出第一页的。
有办法一下子把3页全部导出吗?
Dim dt As Table = Tables("临时版本跟踪表")
Dim filepath As String = "C:\\临时版本跟踪表\\" & startdate.Value & "-" & enddate.value & ".xls"

Dim nms() As String = {"临时版本编号","需求编号","博达机型","客户","需求提交时间","预计提供时间","开发环境","代码message","软件环境","show_version","技术支持邮箱","研发邮箱","客户期望交期","log","发布目录","测试目录","状态","状态直白","需求描述"} \'要导出的列名
Dim caps() As String = {"临时版本编号","需求编号","博达机型","客户","需求提交时间","预计提供时间","开发环境","代码message","软件环境","show_version","技术支持邮箱","研发邮箱","客户期望交期","log","发布目录","测试目录","状态","状态直白","需求描述"} \'对应的列标题
Dim szs() As Integer = {100,100,100,200,200,200,200,200,200,200,200,200,200,200,200,200,80,200,300} \'对应的列宽
Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
Dim st As XLS.Style = Book.NewStyle \'日期列的显示格式
st.Format = "yyyy-MM-dd hh:mm:ss"
For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) \'指定列标题
    Sheet.Cols(c).Width = szs(c) \'指定列宽
    If dt.Cols(nms(c)).IsDate Then \'如果是日期列
        Sheet.Cols(c).Style = st \'设置显示格式
    End If
Next
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
    For c As Integer = 0 To nms.length -1
        If not dt.rows(r).Isnull(nms(c)) Then Sheet(r +1, c).Value = dt.rows(r)(nms(c))
    Next
Next
Book.Save(filepath)
MessageBox.show("保存路径:" & FilePath,"导出成功",MessageBoxButtons.OK,MessageBoxIcon.Information)

--  作者:有点蓝
--  发布时间:2016/9/19 16:58:00
--  
打印前加载全部数据,打印完后再重新分页。



--  作者:huhu
--  发布时间:2017/8/31 18:23:00
--  
比如说全部数据分页加载有5页,通过筛选分页只加载了3页,我要把这3页导出来。
按你说的导出前先全部加载数据后分页。
如果一下子全部加载数据那不导出的是5页的数据了,而不是我筛选的3页数据了吧。
----总不能把所有的loadfilter条件都写一次吧,情况很多条件也很多。这种情况改怎么处理。


--  作者:huhu
--  发布时间:2017/8/31 18:27:00
--  
还有红色的代码,提示不支持时间格式,想体现date.now怎么办。改为date.today,会出现每次都覆盖。
Dim dt As Table = Tables("BUG录入表")
Dim filepath As String = "C:\\BUG录入表\\" & Date.Now & ".xls"

Dim nms() As String = {"BUG_ID","测试项目名称","项目简介","测试机型","软件版本","现象描述","怀疑模块","BUG重现类别","严重程度","状态","模块维护人","研发组长","提交人","测试组长","测试提交时间"} \'要导出的列名
Dim caps() As String = {"BUG_ID","测试项目名称","项目简介","测试机型","软件版本","现象描述","怀疑模块","BUG重现类别","严重程度","状态","模块维护人","研发组长","提交人","测试组长","测试提交时间"} \'对应的列标题
Dim szs() As Integer = {120,300,200,200,200,500,100,100,100,100,100,100,100,100,150} \'对应的列宽
Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
Dim st As XLS.Style = Book.NewStyle \'日期列的显示格式
st.Format = "yyyy-MM-dd"
For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) \'指定列标题
    Sheet.Cols(c).Width = szs(c) \'指定列宽
    If dt.Cols(nms(c)).IsDate Then \'如果是日期列
        Sheet.Cols(c).Style = st \'设置显示格式
    End If
Next
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
    For c As Integer = 0 To nms.length -1
        If not dt.rows(r).Isnull(nms(c)) Then Sheet(r +1, c).Value = dt.rows(r)(nms(c))
    Next
Next
Book.Save(filepath)
MessageBox.show("保存路径:" & FilePath,"导出成功",MessageBoxButtons.OK,MessageBoxIcon.Information)
DataTables("BUG录入表").load
With DataTables("BUG录入表")
    .LoadOver = "BUG_ID"
    .LoadReverse=True
    .LoadTop =  22
    .LoadPage =  0
    .Load()
    If .TotalPages = 0 Then
        .LoadPage = 0
        e.Form.Controls("TextBox1").Value = .LoadPage  & "/" & .TotalPages
    Else
        e.Form.Controls("TextBox1").Value = .LoadPage + 1  & "/" & .TotalPages
    End  If
End  With

--  作者:有点甜
--  发布时间:2017/8/31 18:27:00
--  

根据当前表格的LoadFilter,生成一个新的表格,导出那个表格,不就行了?


--  作者:huhu
--  发布时间:2017/9/1 11:42:00
--  
我是通过选择其他控件筛选出table(好多还是组合筛选)。难不成我导出按钮的代码,每次都需要把筛选控件的loadfilte的条件都加一次。
是不是我理解的不对啊。
我就是希望把已经筛选的出的table导出来。

--  作者:有点甜
--  发布时间:2017/9/1 12:31:00
--  

无论你怎么筛选,关键是你要导出的时候,这个时候,你的筛选条件是固定的了啊,通过filter或者loadfilter可以获取的啊。

 

然后根据这个条件,不分页把所有数据都弄出来,再导出。