以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- excel分页导出的问题 (http://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文档 \'申明变量时可以用逗号分隔 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倍-------------------- |