以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于统计表 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=106214) |
-- 作者:做自己 -- 发布时间:2017/9/4 18:05:00 -- 关于统计表 一个表里面有多个仓库的数据,我想在表里面统计名字相同的数据,把数量统计一个和到统计表里面,但是每个仓库的单价可能不一样,这样用统计表貌似就不合适了,我应该怎么处理 |
-- 作者:有点蓝 -- 发布时间:2017/9/4 18:11:00 -- 上传实例,并截图详细说明要实现什么最终效果 |
-- 作者:做自己 -- 发布时间:2017/9/4 18:47:00 -- 由于数据表数据较多,有什么好办法能提高效率吗? |
-- 作者:有点蓝 -- 发布时间:2017/9/4 20:11:00 -- 具体上传实例说明。不同表结构,不同需求处理方法不一样 |
-- 作者:做自己 -- 发布时间:2017/9/5 9:51:00 -- 我描述一下把,就是一个表里面有仓库名称,物料名称,数量,想把物料名称一样的数量加起来,生成一个新的表 |
-- 作者:有点甜 -- 发布时间:2017/9/5 9:57:00 -- 直接对物料名称分组统计不就好了?
请具体做一个foxtable例子发上来说明。 |
-- 作者:做自己 -- 发布时间:2017/9/5 13:22:00 -- \'\'\' Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "Excel文件|*.xls|Excel文件|*.xlsx" \'设置筛选器 If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮 Else Return End If Dim Book As New XLS.Book(dlg.FileName) Dim Sheet As XLS.Sheet = Book.Sheets(0) ‘注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致 Dim nms() As String = {"仓库名称""存货编码","全球代码","存货分类名称","存货名称","原现存数量","原可用数量","原参考售价标准","现存数量","可用数量","参考售价标准","批号"} Dim nmsX() As String = {"仓库名称","存货编码","全球代码","存货分类名称","存货名称","现存数量","可用数量","参考售价标准","批号"} ’注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题 Dim pattern As String = "[\\u4e00-\\u9fa5| ]" Dim strSta As String For n As Integer = 1 To Sheet.Rows.Count -1 \' If Sheet(n,5).Value.Contains("(") Or Sheet(n,5).Value.Contains(")") Or Sheet(n,6).Value.Contains("(") Or Sheet(n,6).Value.Contains(")") Or Sheet(n,7).Value.Contains("(") Or Sheet(n,7).Value.Contains(")") Then \' Else Dim drDaoRu As DataRow = DataTables("存货信息导入数据表").AddNew() For m As Integer = 0 To nmsX.Length - 1 If m=0 Then Else If m=2 Then Else If m=8 Then Else If m=5 Then If Sheet(n,5).Value = "充足" Then drDaoRu(nmsX(5)) = 12 Else If Sheet(n,5).Value.Trim() = "" Then drDaoRu(nmsX(5)) = 0 Else drDaoRu(nmsX(5)) = CSng(Sheet(n,m).Value) End If Else If m=6 Then If Sheet(n,6).Value = "充足" Then drDaoRu(nmsX(6)) = 12 Else If Sheet(n,6).Value.Trim() = "" drDaoRu(nmsX(6)) = 0 Else drDaoRu(nmsX(6)) = CSng(Sheet(n,m).Value) End If Else If m=7 Then If Sheet(n,7).Value.Trim() = "" Then drDaoRu(nmsX(7)) = 0 Else If Sheet(n,7).Value.Trim() = "*" Then drDaoRu(nmsX(7)) = 0 Else Dim Multi As String = Sheet(n,m).Value Dim Values1() As String Values1 = Multi.split("(") Dim Values2() As String Values2 = Values1(0).split(" ") Dim Values() As String Values = Values2(0).split("-") strSta = System.Text.RegularExpressions.Regex.Replace(Values(Values.Length-1), pattern ,"") drDaoRu(nmsX(7)) = CSng(strSta.Trim()) End If Else drDaoRu(nmsX(m)) = Sheet(n,m).Value End If Next drDaoRu.Save \'End If Next Dim g As New GroupTableBuilder("存货统计表", DataTables("存货信息导入数据表")) g.Groups.AddDef("存货编码") g.Groups.AddDef("存货分类名称") g.Groups.AddDef("存货名称") g.Totals.AddDef("现存数量") g.Totals.AddDef("可用数量") g.Totals.AddDef("参考售价标准") g.Build() Tables("存货信息表").StopRedraw() Dim drListDaoRu As List (of DataRow) Dim drNew As DataRow Dim dr As DataRow Dim drFind As DataRow drListDaoRu = DataTables("存货统计表").Select("[存货编码]<>\'\'") For Each drTongJi As DataRow In drListDaoRu dr = DataTables("存货信息表").Find("[存货编码] = \'"& drTongJi("存货编码") &"\' And [存货名称] = \'"& drTongJi("存货名称") &"\'") If dr IsNot Nothing Then dr("原现存数量") = dr("现存数量") dr("原可用数量") = dr("可用数量") dr("原参考售价标准") = dr("参考售价标准") dr("原日期") = dr("现日期") dr("现日期") = Date.Today dr("现存数量") = drTongJi("现存数量") dr("可用数量") = drTongJi("可用数量") dr("参考售价标准") = drTongJi("参考售价标准") Else drNew = DataTables("存货信息表").AddNew drNew("现日期") = Date.Today drNew("存货编码")=drTongJi("存货编码") drNew("存货分类名称")=drTongJi("存货分类名称") drNew("存货名称")=drTongJi("存货名称") drNew("现存数量")=drTongJi("现存数量") drNew("可用数量")=drTongJi("可用数量") drNew("参考售价标准") = drTongJi("参考售价标准") drNew.Save End If Next Tables("存货信息表").ResumeRedraw() DataTables("存货信息表").Save Dim fenLei As WinForm.ComboBox = e.Form.Controls("CboFenLei") Dim s As String = DataTables("存货信息表").GetComboListString("存货分类名称") fenLei.ComboList =s Dim tv As WinForm.TreeView tv =e.Form.Controls("TreeView1") tv.Nodes.Clear For Each ss As String In s.split("|") Dim nd As WinForm.TreeNode = tv.nodes.Add(ss) Next Tables("存货信息表").Filter = "" DataTables("存货信息导入数据表").DeleteFor("") DataTables("存货信息导入数据表").Save DataTables("存货统计表").DeleteFor("") DataTables("存货统计表").Save MessageBox.Show("导入成功","提示") 代码是这么写的,一个两万多条数据的表需要十几分钟导入时间,能不能优化一下?
|
-- 作者:有点甜 -- 发布时间:2017/9/5 14:28:00 -- 加入代码分别测试读取excel的时间、分组查询计算的时间、保存代码的时间。
一般是select、find、save比较耗时。请上传具体例子测试。 |
-- 作者:做自己 -- 发布时间:2017/9/5 14:33:00 -- 那我获取一个表的所有行有什么好办法吗?不用select |
-- 作者:有点甜 -- 发布时间:2017/9/5 14:45:00 -- 以下是引用做自己在2017/9/5 14:33:00的发言:
那我获取一个表的所有行有什么好办法吗?不用select
修改和查询,不要并存 http://www.foxtable.com/webhelp/scr/2225.htm
|