Foxtable(狐表)用户栏目专家坐堂 → 处理EXCEL


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

主题:处理EXCEL

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/20 14:23:00 [只看该作者]

您的意思是异数函数里频繁调用同步函数会影响效率是吗?

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


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/20 14:26:00 [只看该作者]

是的

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/20 15:02:00 [只看该作者]

好的,明白了。那我还是少频繁更新吧。

追问一个:往TEXTBOX追加多行的内容的时候,如何让每次追加都滚动到最后一行?而不是手动拖滚动条?

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


加好友 发短信
等级:超级版主 帖子:110333 积分:561507 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/20 15:11:00 [只看该作者]

Dim rt As WinForm.TextBox = e.Form.Controls("TextBox1")
rt.Select
rt.SelectionStart = rt.text.length
Dim b = rt.basecontrol
b.ScrollToCaret

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/24 15:42:00 [只看该作者]

请教老师在异步处理多个EXCEL文件时,处理完想要保存并退出APP.QUIT,那么保存和退出代码是在异步函数里直接写还是在程序的最后统一保存再退出?因为现在处理多个EXCEL文件时会出现如下错误(执行前已经确认进程中不含有EXCEL文件)

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:自定义函数,异步函数
详细错误信息:
调用的目标发生了异常。
Microsoft Excel 不能访问文件“D:\test\1\66C1BA10”。 可能的原因有以下几个:

? 文件名称或路径不存在。
? 文件正被其他程序使用。
? 您正要保存的工作簿与当前打开的工作簿同名。

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


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


[此贴子已经被作者于2021/5/24 15:49:22编辑过]

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


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

函数代码发上来看看

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/24 15:58:00 [只看该作者]

1、下面是异步函数代码,调用是:Functions.AsyncExecute("异步函数",file,dic)程序执行偶尔会报65楼的错误
2、代码最后一行显示处理文件所用时间时他是实时显示的,我想要处理完所有文件后显示,如何修改?
Dim st As Date = Date.Now
Dim app As new MSExcel.Application
Dim Numcb1 As WinForm.NumericComboBox = Forms("窗口1").Controls("NumComBox1")
Dim Numcb2 As WinForm.NumericComboBox = Forms("窗口1").Controls("NumComBox2")
Dim lbl As WinForm.Label = Forms("窗口1").Controls("Label6")

Dim file = args(0)
Dim dic  = args(1)
Dim excelcol As Integer
Dim excelrows As Integer
Dim RowsMax As Integer
Dim ColsMax As Integer
If file.EndsWith(".xls") OrElse file.EndsWith(".XLS") OrElse file.EndsWith(".xlsx") OrElse file.EndsWith(".XLSX")   Then
    If file.EndsWith(".xls") OrElse file.EndsWith(".XLS")  Then
        
        excelcol = 256
        excelrows  =65536
    Else
        excelcol = 16384
        excelrows  =1048576
    End If
    'output.show(file & excelcol & "," & excelrows)
    
    Dim wb=app.WorkBooks.open(file)
    
    For k As Integer=1 To wb.worksheets.Count
        'If Wb.WorkSheets(k).Visible <> 0 Then        '如果sheet表为不隐藏时处理(0隐藏,-1为不隐藏
            Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k)
            If Numcb1.Text = Nothing And Numcb2.Text = Nothing Then
                RowsMax = 0
                ColsMax = ws.UsedRange.columns.count
                '获取最大行
                For i As Integer = 1 To ColsMax
                    Dim r = ws.cells(excelrows,i).End(MsExcel.XlDirection.xlUp).Row
                    If r > RowsMax Then
                        RowsMax = r
                    End If
                Next
                'Output.Show("rowsmax =" & rowsmax )
                '获取最大列
                For i As Integer = 1 To RowsMax
                    Dim r = ws.cells(i,excelcol).End(MsExcel.XlDirection.xlToLeft).Column
                    If r > ColsMax Then
                        ColsMax = r
                    End If
                Next
                'Output.Show("ColsMax =" & ColsMax )
            Else
                RowsMax = Numcb1.Value
                ColsMax = Numcb2.Value
            End If
            
            Dim  rg As MSExcel.Range =  Ws.Range(Ws.Cells(1,1), Ws.Cells(RowsMax,ColsMax))
            'If rg.Count = 1 And rg(1).Value = "" Then 'If rg.Count = 1 And rg(1).Value Is Nothing Then
            '下面代码解决doubleTO string转换报错问题.2021-05-07修改
            If rg.Count = 1 And rg(1).Value Is Nothing Then
                Continue For
            End If

            Dim ary = rg.value
            For i As Integer=1 To RowsMax
                'If rg.Rows(i).height <> 0 Then
                For j As Integer = 1 To ColsMax
                    'If rg.Columns(j).width <> 0 Then
                    If ary(i, j) <> Nothing  AndAlso Typeof ary(i,j) Is String AndAlso dic.ContainsKey(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), "")) Then

                        rg(i, j).Value= dic(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), ""))
                    End If
                    'End If
                Next
                'End If
            Next
            Functions.BeginSyncExecute("def","[文件名:" & file & "]" & "," & "[Sheet名称:" & ws.name & "]")

        'End If '不处理隐藏sheet
        
    Next


    wb.Save
    app.quit
End If
FileCount=FileCount+1
Functions.BeginSyncExecute("同步函数","已处理" & FileCount & "个文件","耗时: " & (Date.Now - st).TotalSeconds & "秒")

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


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

下面函数def代码是什么?

Functions.BeginSyncExecute("def","[文件名:" & file & "]" & "," & "[Sheet名称:" & ws.name & "]")

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2021/5/24 16:20:00 [只看该作者]

def函数代码:

Forms("窗口1").Controls("TextBox5").text & = vbcrlf & args(0)
'下面代码可实现TEXTBOX的光标始终在最下面
Dim rt As WinForm.TextBox = Forms("窗口1").Controls("TextBox5")
rt.Select
rt.SelectionStart = rt.text.length
Dim b = rt.basecontrol
b.ScrollToCaret


 回到顶部
总数 108 1.. 上一页 2 3 4 5 6 7 8 9 10 11 下一页