以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  excel分页导出的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=116938)

--  作者:ShotHit
--  发布时间:2018/4/3 0:23:00
--  excel分页导出的问题
如果 订单表 数据是分页显示的,如10条数据一页
那么 如何根据刷选条件进行Excel导出结果数据(刷选结果可能有多页)


试过Tables(tbName).SaveExcel 可以导出当前页,所有数据如何导出,求代码思路。谢谢。

--  作者:有点甜
--  发布时间:2018/4/3 8:56:00
--  

1、你说的是分页加载吧?你要区别加载和筛选。

 

2、再有把所有数据都加载进来,才能完整导出的,参考 http://www.foxtable.com/webhelp/scr/1928.htm

 

或者,可以尝试后台处理 http://www.foxtable.com/webhelp/scr/3233.htm

 


--  作者:wyz20130512
--  发布时间:2018/4/3 21:27:00
--  
从后台直接导出数据至Excel文档

1.添加一个名为SQLExporte的内部函数,其代码如下:

\'申明变量时可以用逗号分隔

Dim st As Date = Now(),et As Date,sp As New TimeSpan

Dim cmd As New SQLCommand,dt As DataTable

cmd.ConnectionName = Args(2)

cmd.CommandText = "Sel ect * From {" & Args(0) & "}"

dt = cmd.ExecuteReader() \'通过SQL命令生成临时表(DataTable)

 

Dim app As New MSExcel.Application

Dim wb As MSExcel.WorkBook = app.WorkBooks.Add()

\'获取工作簿中的第一张工作表

Dim ws As MSExcel.WorkSheet = wb.WorkSheets(1)

Dim j As Integer = 1

\'将临时表的列名写入工作表的第一行

For Each dc As DataCol In dt.DataCols

    ws.Cells(1,j) = dc.Name:j += 1

Next

 

\'通过双循环将临时表的数据写入工作中

For i As Long = 0 To dt.DataRows.Count - 1:j = 1

    For Each dc As DataCol In dt.DataCols

        ws.Cells(i+2,j) = dt.DataRows(i)(dc.Name):j += 1

    Next

Next

 

\'冒号可以分隔多条短语句

wb.SaveAs(Args(1)):app.Quit():et = Now():sp = et - st

MessageBox.Show("开销: " & sp.TotalSeconds & " ","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information)


2.函数调用:
Functions.Execute("SQLExporte",TableName,ExcelName,ConnectionName)
TableName 字符型,要导出的表名
ExcelName 字符型,要保存的Excel文件(含完整的路径)
ConnectionName 字符型,数据源名称(若为内部数据源,则指定为空串)

3.当数据量较大时,效率低(重点在第三段代码),敬拜高手完善!
[此贴子已经被作者于2018/4/4 13:32:05编辑过]

--  作者:wyz20130512
--  发布时间:2018/4/3 21:49:00
--  
自顶一下,求高人指点和完善!
--  作者:有点蓝
--  发布时间:2018/4/3 21:56:00
--  
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=65686&skin=0,看8楼,反过来应该也有效

数据量达到一定程度一样无解



--  作者:wyz20130512
--  发布时间:2018/4/3 23:04:00
--  回复:(有点蓝)http://www.foxtable.com/bbs/dispbb...
感谢“有点蓝”老师的指点!
--  作者:wyz20130512
--  发布时间:2018/4/4 11:17:00
--  
经“有点蓝”老师的指点,我将3楼的内部函数第三段代码修改如下:

\'--------------------通过二维数组一次性获取表中的所有数据------------------------------

Dim values(dt.DataRows.Count-1,dt.DataCols.Count-1)

For i As Long = 0 To dt.DataRows.Count - 1

    j = 0

    For Each dc As DataCol In dt.DataCols

        values(i,j) = dt.DataRows(i)(dc.Name)

        j += 1

    Next

Next

\'将二维数组中值批量一次性写入Excel工作表中

ws.Range(ws.Cells(2,1),ws.Cells(dt.DataRows.Count+1,dt.DataCols.Count)).Value = values

\'---------------批量读写较单次读写(以2.2万数据为例测试)快了竟270倍--------------------