Foxtable(狐表)用户栏目专家坐堂 → excel分页导出的问题


  共有2112人关注过本帖树形打印复制链接

主题:excel分页导出的问题

帅哥哟,离线,有人找我吗?
ShotHit
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:127 积分:1463 威望:0 精华:0 注册:2014/10/15 11:39:00
excel分页导出的问题  发帖心情 Post By:2018/4/3 0:23:00 [只看该作者]

如果 订单表 数据是分页显示的,如10条数据一页
那么 如何根据刷选条件进行Excel导出结果数据(刷选结果可能有多页)


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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1242 积分:9386 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By: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
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1242 积分:9386 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By:2018/4/3 21:49:00 [只看该作者]

自顶一下,求高人指点和完善!

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/4/3 21:56:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
wyz20130512
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1242 积分:9386 威望:0 精华:0 注册:2013/5/12 9:22:00
回复:(有点蓝)http://www.foxtable.com/bbs/dispbb...  发帖心情 Post By:2018/4/3 23:04:00 [只看该作者]

感谢“有点蓝”老师的指点!

 回到顶部
帅哥哟,离线,有人找我吗?
wyz20130512
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1242 积分:9386 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By: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倍--------------------



 回到顶部