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


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

主题:excel分页导出的问题

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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9468 威望: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
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1249 积分:9468 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By:2018/4/3 21:49:00 [显示全部帖子]

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

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


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

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

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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9468 威望: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倍--------------------



 回到顶部