Foxtable(狐表)用户栏目专家坐堂 → excel导入效率问题


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

主题:excel导入效率问题

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


加好友 发短信
等级:三尾狐 帖子:766 积分:5491 威望:0 精华:0 注册:2012/10/5 21:53:00
excel导入效率问题  发帖心情 Post By:2022/6/16 21:10:00 [只看该作者]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls*" '设置筛选器
Dim tb As DataTable = DataTables("表A")
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    tb.LoadFilter = ""
    tb.Load
    tb.ReplaceFor("状态",False)
    Dim zdw As new List(of Integer)
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Dim zd As New Dictionary(Of Integer, String)
    For n As Integer = 0 To sheet.Cols.Count - 1
        If zd.ContainsValue(sheet(0,n).value.trim()) Then
            MessageBox.Show("存在重复列" & sheet(0,n).value.trim())
            Return
        Else
            zd.Add(n,sheet(0,n).value.trim())
        End If
    Next
    Dim s  As New List(Of Integer)
    For Each k As Integer In zd.Keys '显示所有键及其对应的值
        If tb.DataCols.Contains(zd(k)) = False Then
            s.Add(k)
        End If
    Next
    For Each q As Integer In s
        zd.Remove(q)
    Next
    If zd.Count = 0 Then
        MessageBox.Show("不存在与导入表相符的列!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Return
    End If
    Dim r As DataRow
    
    For n As Integer = 1 To Sheet.Rows.Count -1
        r =  tb.Find("编号 = '" & sheet(n,0).value & "'")
        If r Is Nothing Then
            zdw.Add(n)
            Continue For
        End If
        For Each k As Integer In zd.Keys '显示所有键及其对应的值
            If sheet(n,k).value = r(zd(k)) Then
            Else
                r(zd(k)) = sheet(n,k).value
            End If
        Next
        r("状态") = True
    Next
    Dim tbq As Integer = tb.DataRows.Count
    tb.AddNew(zdw.Count)
    For Each n As Integer In zdw
        r = tb.DataRows(tbq)
        r("状态") = True
        For Each k As Integer In zd.Keys '显示所有键及其对应的值
            If sheet(n,k).value = r(zd(k)) Then
            Else
                r(zd(k)) = sheet(n,k).value
            End If
        Next
        tbq += 1
    Next
End If
'tb.Save

请问这个excel导入发现7000行的效率都很低,问题出现在r("状态") = True这个上面,理论上7000行,对行进行修改应该很快啊,这个居然需要3~5分钟才能执行完,我需要记录这个状态列,将删除的行,删除掉
[此贴子已经被作者于2022/6/16 21:16:43编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112378 积分:572152 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/16 21:16:00 [只看该作者]

试试停止绘制并屏蔽事件

DataTables("表A").StopRedraw
systemready=false
1楼的代码
systemready=true
DataTables("表A").ResumeRedraw


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


加好友 发短信
等级:三尾狐 帖子:766 积分:5491 威望:0 精华:0 注册:2012/10/5 21:53:00
  发帖心情 Post By:2022/6/16 21:19:00 [只看该作者]

不行,不知道是不是表加载多了的问题,但是每个表加载的数据量不是很大

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112378 积分:572152 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/16 21:43:00 [只看该作者]

是不是表加载多了的问题,新建一个项目测试对比看看

 回到顶部