以文本方式查看主题

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

--  作者:xinqingok
--  发布时间:2014/6/5 19:07:00
--  [已解决]多张临时表导到一个excel并公式计算
书接前文,之前在论坛求助,通过主表动态生成临时表。见之前的帖子http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=51912&page=2
首先感谢之前Bin 大神帮我解惑。

现在点按下窗体中的【生成表】按钮里就可以生成临时表

此主题相关图片如下:1.png
按此在新窗口浏览图片

现在我想在窗体的“分母”处指定一张表,点导出excel后,用剩下的临时表分别与指定的这张表两两生成一个excel文件,如下图,分母项求平均值,然后分子项各项去除这个平均值。本来一开始我是设想用excel模板导出的,但是因为临时表的表名【张三】【王二】等是从主表里取的数据,每次用的时候都可能是不同的值,临时表的列名也在变化中,所以没有办法用下面这样的模板去生成。
电视 汽车 <end>
<张三> [电视] [汽车] <all>
<end>
张三/王二
电视 汽车 <end>
<王二> [电视] [汽车] <all>
<end>
平均 #DIV/0! #DIV/0! #DIV/0!

此主题相关图片如下:2.png
按此在新窗口浏览图片


望大神们再次不吝赐教,感谢!工程文件马上传

[此贴子已经被作者于2014-6-5 22:08:31编辑过]

--  作者:xinqingok
--  发布时间:2014/6/5 19:09:00
--  
想生成的excel样本
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:12.xlsx

工程文件
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.table



[此贴子已经被作者于2014-6-5 19:14:03编辑过]

--  作者:xinqingok
--  发布时间:2014/6/5 19:12:00
--  
工程文件数据源有问题,马上改过来
--  作者:xinqingok
--  发布时间:2014/6/5 19:15:00
--  
工程文件,数据源改好了
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.table


--  作者:有点甜
--  发布时间:2014/6/5 20:31:00
--  

 

 如下

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.table


--  作者:xinqingok
--  发布时间:2014/6/5 21:30:00
--  有点甜大哥,对不住了。
实在不好意思,今天麻烦大哥好几趟了,代码很牛B也很好用,但是我之前的excel公式没写全,还有几个计算要做,本来是想参照一下大哥写的代码自己来写的,但是看了好长时间,楞是没看懂大哥的代码,所以只好厚着脸皮来请大哥出马了。还望见谅。

如第一个sheet“张三-王二”中所示,在第10,11行分别加了求平均值和方差。12,13行是指前面10,11行的数据相对于B10单元格的百分值。

图片点击可在新窗口打开查看此主题相关图片如下:asffsd.png
图片点击可在新窗口打开查看


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:12-new.xlsx



--  作者:有点甜
--  发布时间:2014/6/5 21:56:00
--  

 代码

 

Dim Book As New XLS.Book \'定义一个Excel工作簿
book.Sheets.RemoveAt(0)
Dim fz As String = e.Form.Controls("b").Text
Dim avgs As New List(Of Double)
For Each dc As DataCol In DataTables(fz).DataCols
    avgs.add(DataTables(fz).Compute("avg(" & dc.Name & ")"))
Next
Dim zms As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

For Each tn As String In DataTables("主表").GetValues("B", "B is not null and B <> \'" & fz & "\'")
    Dim Sheet As XLS.Sheet = Book.Sheets.Add(tn & "-" & fz) \'引用工作簿的第一个工作表
    Dim r As Integer = 1
    Dim c As Integer = 1
    sheet(0, 0).Value = tn
    For Each dc As DataCol In DataTables(tn).DataCols
        sheet(0, c).Value = dc.name
        c += 1
    Next
    For Each dr As DataRow In DataTables(tn).DataRows
        c = 1
        For Each dc As DataCol In DataTables(tn).DataCols
            sheet(r, c).Value = dr(dc.name)
            c += 1
        Next
        r += 1
    Next
   
    r += 1
    sheet(r, 0).Value = tn & "/" & fz
    For Each dr As DataRow In DataTables(tn).DataRows
        c = 1
        For Each dc As DataCol In DataTables(tn).DataCols
            sheet(r, c).Value = dr(dc.name) / avgs(c-1)
            c += 1
        Next
        r += 1
    Next
    sheet(r, 0).Value = "average"
    c = 1
    For Each dc As DataCol In DataTables(tn).DataCols
        sheet(r, c).Formula = "=AVERAGE(" & zms(c) & (r - DataTables(tn).DataRows.count + 1) & ":" & zms(c) & r &")"
        c += 1
    Next
    r += 1
    sheet(r, 0).Value = "sd"
    c = 1
    For Each dc As DataCol In DataTables(tn).DataCols
        sheet(r, c).Formula = "=STDEV(" & zms(c) & (r - DataTables(tn).DataRows.count + 1) & ":" & zms(c) & r &")"
        c += 1
    Next
    r += 1
    sheet(r, 0).Value = "average"
    c = 1
    For Each dc As DataCol In DataTables(tn).DataCols
        sheet(r, c).Formula = "=(" & zms(c) & (r-1) & "/" &  "B" & (r-1) & ")*100"
        c += 1
    Next
    r += 1
    sheet(r, 0).Value = "sd"
    c = 1
    For Each dc As DataCol In DataTables(tn).DataCols
        sheet(r, c).Formula = "=(" & zms(c) & (r-1) & "/" &  "B" & (r-2) & ")*100"
        c += 1
    Next

   

    r += 2
    c = 1
    sheet(r, 0).Value = fz
    For Each dc As DataCol In DataTables(fz).DataCols
        sheet(r, c).Value = dc.name
        c += 1
    Next
    r += 1
    For Each dr As DataRow In DataTables(fz).DataRows
        c = 1
        For Each dc As DataCol In DataTables(fz).DataCols
            sheet(r, c).Value = dr(dc.name)
            c += 1
        Next
        r += 1
    Next
   
    r += 1
    c = 1
    sheet(r, 0).Value = "平均"
    For Each avg As Double In avgs
        sheet(r, c).Value = avg
        c += 1
    Next
Next
book.Save(ProjectPath & "test.xls")

Dim proc As new Process
proc.File = ProjectPath & "test.xls"
proc.start


--  作者:xinqingok
--  发布时间:2014/6/5 22:08:00
--  
有效,请受小生一拜。图片点击可在新窗口打开查看
--  作者:xinqingok
--  发布时间:2014/6/6 10:46:00
--  [求助]大哥,怎么添加图表?
接上面的问题。现在想添加一张图表,
1,以第一行和average2所在行生成柱状图
2,修改标题:张三/王二
3,图表内部网格删除
4,以sd2所在行数据作为正负偏差

此主题相关图片如下:1.png
按此在新窗口浏览图片


我自己试着写了下,用大哥之前给的代码,在生成excel的时候加入生成图表的功能,参照帮助文件里的代码,提示ChartObjects不是XLS.Sheet的成员。
望大哥指正!
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:1.xls

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:导出excel.table


[此贴子已经被作者于2014-6-6 10:46:29编辑过]

--  作者:有点甜
--  发布时间:2014/6/6 10:50:00
--  

 就不帮你写了。自食其力

 

 图表基础:http://www.foxtable.com/help/topics/0966.htm

 

 插入到excle:http://www.foxtable.com/help/topics/1925.htm