以文本方式查看主题

-  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=140312)

--  作者:guosheng
--  发布时间:2019/9/3 11:10:00
--  分组统计结果导出excel,若数据量比较大,该如何处理啊?
Dim b2 As New SQLGroupTableBuilder("统计表2","租赁合同发票明细表")
b2.C
Dim dt2 As fxDataSource
………………

Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
     Tables("统计表2").SaveExcel(dlg.FileName,"明细表")  \'保存文件
        Dim Proc As New Process
        Proc.File = dlg.FileName
        Proc.Start()
End If

--  作者:有点蓝
--  发布时间:2019/9/3 11:37:00
--  
是统计有问题?还是导出excel有问题?

如果是统计有问题,只能是分条件多次导了

--  作者:guosheng
--  发布时间:2019/9/3 11:56:00
--  
统计没有问题。问题是要导出数据量太大,超过十万条,该怎么进行导出的过程优化啊?
[此贴子已经被作者于2019/9/3 11:56:51编辑过]

--  作者:有点蓝
--  发布时间:2019/9/3 13:40:00
--  
看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=100317&replyID=&skin=1
--  作者:guosheng
--  发布时间:2019/9/17 15:55:00
--  
数据量大引用dll文件,保存时,怎么弹出保存框,来执行保存过程啊?(图中阴影部分该怎么改啊)
Dim jb As New SQLJoinTableBuilder("查询表1","租赁项目结转明细表")
jb.C
jb.AddTable("租赁项目结转明细表","合同编号","租赁合同结转情况表","合同编号",JoinModeEnum.Left)
jb.AddCols("{租赁项目结转明细表}.合同编号", "客户名称","房间名称","项目名称","租赁类别","合同开始日期","合同终止日期", "应结转租金税额","应结转租金金额","应结转服务费税额","应结转服务费金额","应结转日期","实际结转日期","红冲确认人","红冲确认日期")
jb.filter= filter
jb.Build()
DataTables("查询表1").DataCols.Add("不含税租金金额",Gettype(Double), "isnull(应结转租金金额,0)-isnull(应结转租金税额,0)" )
DataTables("查询表1").DataCols.Add("不含税服务费金额",Gettype(Double), "isnull(应结转服务费金额,0)-isnull(应结转服务费税额,0)" )
Tables("查询表1").Cols("不含税租金金额").Move(8)
Tables("查询表1").Cols("不含税服务费金额").Move(11)
\'Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
\'dlg.Filter= "Excel文件|*.xls" \'设置筛选器
\'If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
     \'Tables("查询表1").SaveExcel(dlg.FileName,"明细表")  \'保存文件
        \'Dim Proc As New Process
        \'Proc.File = dlg.FileName
        \'Proc.Start()
\'End If
Dim _execl As New ExOpenXml.ExOXExecl()
_execl.Open("d:\\simple.xlsx")
_execl.ToExecl(DataTable.BaseTable)
_execl.Dispose()
[此贴子已经被作者于2019/9/17 16:36:00编辑过]

--  作者:有点蓝
--  发布时间:2019/9/17 16:12:00
--  
这个意思?

If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim _execl As New ExOpenXml.ExOXExecl()
    _execl.Open(dlg.FileName)
    _execl.ToExecl(Tables("查询表1").DataTable.BaseTable)
    _execl.Dispose()
End If

--  作者:guosheng
--  发布时间:2019/9/17 16:34:00
--  
改后转换提示:
Conversion from type \'DBNull\' to type \'Date\' is not valid.
若把日期列(“合同开始日期","合同终止日期“,”红冲确认日期”)去掉提示则导出成功了。
1、日期列导出该怎么处理啊?
2、此外,弹出的保存对话框,需要输入excel的扩展名,否则不让保存,怎么让保存时只输入 文件名即可啊(不用输入xlsx扩展名)。
3、
Tables("查询表1").Cols("不含税租金金额").Move(8)
Tables("查询表1").Cols("不含税服务费金额").Move(11)
这两行代码没起作用,最后这两列还是在表的最右边。该咋调啊?
[此贴子已经被作者于2019/9/17 16:51:06编辑过]

--  作者:有点蓝
--  发布时间:2019/9/17 16:54:00
--  
上传实例测试
--  作者:guosheng
--  发布时间:2019/9/17 17:09:00
--  
命令框输入(数据量比较大,执行时需要等待一会;用注释掉的这一行带日期的执行就报错了;红色阴影为日期类型数据):

Dim jb As New SQLJoinTableBuilder("查询表1","租赁项目结转明细表")
jb. C   数据源名称 cs2
jb.AddTable("租赁项目结转明细表","合同编号","租赁合同结转情况表","合同编号",JoinModeEnum.Left)
\'jb.AddCols("{租赁项目结转明细表}.合同编号", "客户名称","房间名称","项目名称","租赁类别","合同开始日期","合同终止日期", "应结转租金税额","应结转租金金额","应结转服务费税额","应结转服务费金额","应结转日期","实际结转日期","红冲确认人","红冲确认日期")
jb.AddCols("{租赁项目结转明细表}.合同编号", "客户名称","房间名称","项目名称","租赁类别", "应结转租金税额","应结转租金金额","应结转服务费税额","应结转服务费金额","应结转日期","实际结转日期","红冲确认人")
jb.Build()
DataTables("查询表1").DataCols.Add("不含税租金金额",Gettype(Double), "isnull(应结转租金金额,0)-isnull(应结转租金税额,0)" )
DataTables("查询表1").DataCols.Add("不含税服务费金额",Gettype(Double), "isnull(应结转服务费金额,0)-isnull(应结转服务费税额,0)" )
Tables("查询表1").Cols("不含税租金金额").Move(8)
Tables("查询表1").Cols("不含税服务费金额").Move(11)
Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim _execl As New ExOpenXml.ExOXExecl()
    _execl.Open(dlg.FileName)
    _execl.ToExecl(Tables("查询表1").DataTable.BaseTable)
    _execl.Dispose()
End If
[此贴子已经被作者于2019/9/18 9:31:05编辑过]

--  作者:有点蓝
--  发布时间:2019/9/17 17:45:00
--  
1、试试这个dll:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:openxml组件.zip

2、添加Filter 
Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter = "Excel文件|*.xlsx"

3、列顺序的问题无法处理,因为是以datatable导出的,顺序只能在table里控制