Foxtable(狐表)用户栏目专家坐堂 → [求助] 优化代码


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

主题:[求助] 优化代码

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
[求助] 优化代码  发帖心情 Post By:2015/4/2 9:37:00 [显示全部帖子]

每天汇总数据,但是到月底的时候数据多了以后,系统就有点慢了,请问如何可以优化一下代码?  还有以下代码不能实现多个文件合并,代码看看是不是错了?
代码如下:

Dim pr As Integer = DataTables("加硫").DataRows.Count     '查询表行数
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "excel文件|*.xls" '设置筛选器
dlg.MultiSelect = True   '允许选择多个文件
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    For Each fl As String In dlg.FileNames
        mg.SourcePath =dlg.FileName '指定数据文件
        mg.Format = "excel" '指定格式
        mg.SourceTableName = "data$" '指定要合并的表
        mg.DataTableName = "加硫" '指定接收数据的表
        mg.Merge() '开始合并
    Next


Dim i As Integer
For i  = DataTables("加硫").DataRows.Count-1 To 0 Step -1
    Dim dr As DataRow = DataTables("加硫").DataRows(i)
    Dim dr2 As DataRow = DataTables("加硫").Find("管理号码='" & dr("管理号码") & "' and 良品='" & dr("良品") & "'and 管理号码1='" & dr("管理号码1") & "'and 工号='" & dr("工号") & "'  and _Identify <> " & dr("_Identify"))
    If dr2 IsNot Nothing Then
        dr2.Delete
    End If
Next  '去重复值

DataTables("加硫").DeleteFor("[管理号码] is null or [良品] is null")  '删除空白行

pr = DataTables("加硫").DataRows.Count - pr '查询表行数


MessageBox.Show("成功导入数据"& pr &"条","提示")

Syscmd.Table.ToggleSortAndFilter()
DataTables("加硫").Save()
End If

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:24:00 [显示全部帖子]

怎么理解这句话,是把要导入的文件名写成一样吗?

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:36:00 [显示全部帖子]

谢谢你回复!
1.希望可以合并多个EXCEl文件,但是我现在的代码不可以。
2.现在的代码,数据多了以后,系统变得很慢,因为要逐行匹配重复的数据。希望可以优化一下代码

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:40:00 [显示全部帖子]

1、数据多,你这样删除重复值,肯定会慢; 难道这个就没有其它办法吗?


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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 10:57:00 [显示全部帖子]

可以把代码的大概意思告诉我。或注解一下代码,谢谢

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


加好友 发短信
等级:童狐 帖子:286 积分:2345 威望:0 精华:0 注册:2013/8/30 3:37:00
  发帖心情 Post By:2015/4/2 12:17:00 [显示全部帖子]

谢谢!合并数据2000条,还是有点慢。比之前快多了。

我这样写的,看看有没有问题?

Dim pr As Integer = DataTables("加硫").DataRows.Count     '查询表行数
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "excel文件|*.xls" '设置筛选器
dlg.MultiSelect = True   '允许选择多个文件
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim mg As New Merger
    For Each fl As String In dlg.FileNames
        mg.SourcePath = fl '指定数据文件
        mg.Format = "excel" '指定格式
        mg.SourceTableName = "data$" '指定要合并的表
        mg.DataTableName = "加硫" '指定接收数据的表
        mg.Merge() '开始合并
    Next


Dim str As String = "管理号码,管理号码1,工号,生产数"
Dim idx As String = ""
Dim ary() As String = str.Split(",")
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
For Each dr As DataRow In DataTables("加硫").Select("管理号码 is not null", str)
    Dim flag As Boolean = False
    For Each a As String In ary
        If pdr IsNot Nothing AndAlso dr(a) <> pdr(a) Then
            flag = True
        End If
    Next
    If flag = False Then
        count += 1
    Else
        'If count = 1 Then
            idx &= pdr("_Identify") & ","
        'End If
        count = 1
    End If
    pdr = dr
Next
For Each a As String In ary
    If pdr IsNot Nothing AndAlso Tables("加硫").Rows(Tables("加硫").Rows.count-2)(a) <> pdr(a) Then
        idx &= pdr("_Identify") & ","
    End If
Next

DataTables("加硫").DeleteFor("_Identify not in (" & idx.trim(",") & ")")  '去重复值

'DataTables("加硫").DeleteFor("[管理号码] is null or [良品] is null")  '删除空白行

pr = DataTables("加硫").DataRows.Count - pr '查询表行数


MessageBox.Show("成功导入数据"& pr &"条","提示")

Syscmd.Table.ToggleSortAndFilter()
DataTables("加硫").Save()
End If

 回到顶部