以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]可否直接引用组合统计的结果?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184503)

--  作者:明天的灵
--  发布时间:2022/12/11 11:24:00
--  [求助]可否直接引用组合统计的结果?
在帮助的“组合多个统计结果”中
http://www.foxtable.com/webhelp/topics/2305.htm
表达式列计算

Tables("窗口1_Table1").DataSource =   dt1  \'将统计结果绑定到Table
 With  DataTables("窗口1_Table1").DataCols  \'用表达式列计算库存数据
    .Add("库存_数量",Gettype(Integer),  "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
      .Add("库存_金额",Gettype(Double),  "[库存_数量] /[进货_数量] * [进货_金额]") 
End With

这段代码可否直接放在dt1(或dt2、dt3)的统计计算中?

例子中,库存数据是用窗口表控件的列,用表达式列根据进货、销售、库存计算得出。
而且实际应用中,没有窗口表控件,需要直接在内部函数中计算,可否直接引用组合统计的结果?

帮助后面有提到
Dim tbl As DataTable = dt1.TodataTable() 
不过,不知道如何使用。
[此贴子已经被作者于2022/12/11 12:52:41编辑过]

--  作者:有点蓝
--  发布时间:2022/12/11 19:59:00
--  
Dim tbl As DataTable = dt1.TodataTable() 
With  tbl .DataCols  \'用表达式列计算库存数据
    .Add("库存_数量",Gettype(Integer),  "IsNull([进货_数量],0) - ISNULL([销售_数量],0) - ISNULL([退货_数量],0)")
      .Add("库存_金额",Gettype(Double),  "[库存_数量] /[进货_数量] * [进货_金额]") 
End With

--  作者:明天的灵
--  发布时间:2022/12/11 20:19:00
--  
谢谢。还有,请问,如何把这个 tbl  数据库导出为XLS文件保存下来
--  作者:有点蓝
--  发布时间:2022/12/11 20:48:00
--  
http://www.foxtable.com/webhelp/topics/1148.htm
--  作者:明天的灵
--  发布时间:2022/12/11 21:02:00
--  
这个帮助也看过,上面是 Table 类型
而组合统计产生的tbl 是Datatable 类型,tbl 没有具体的表名称,不知道如何引用。

改为这样,还是出错

Dim tbl As DataTable = dt1.TodataTable() 

Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
For c As Integer = 0 To tbl.DataCols.Count - 1 \'添加列标题
    Sheet(0, c).Value = tbl.DataCols(c).Name
Next
For r As Integer = 0 To tbl.DataRows.Count - 1 \'填入数据
    For c As Integer = 0 To tbl.DataCols.Count - 1
        Sheet(r + 1, c).Value = tbl.DataRows(r)(c)
    Next
Next
\'打开工作簿
Book.Save("c:\\test.xls")
Dim Proc As New Process 
Proc.File = "c:\\test.xls"
Proc.Start()

[此贴子已经被作者于2022/12/11 22:30:03编辑过]

--  作者:有点蓝
--  发布时间:2022/12/11 21:54:00
--  
麻烦把帮助认真看完
--  作者:明天的灵
--  发布时间:2022/12/11 22:35:00
--  
总算改出来了

Dim tbl As DataTable = dt1.TodataTable() 


Dim Nms(tbl.DataCols.Count) As String

Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表

For c As Integer = 0 To tbl.DataCols.Count - 1 \'添加列标题
    Sheet(0, c).Value = tbl.DataCols(c).Name
    nms(c) = tbl.DataCols(c).Name
Next


For r As Integer = 0 To tbl.DataRows.Count - 1 \'填入数据
    For c As Integer = 0 To tbl.DataCols.Count - 1
        Sheet(r + 1, c).Value = tbl.DataRows(r)(nms(c)) 
    Next
Next
\'打开工作簿
Book.Save("c:\\test.xls")
Dim Proc As New Process 
Proc.File = "c:\\test.xls"
Proc.Start()

[此贴子已经被作者于2022/12/11 22:59:34编辑过]