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


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

主题:处理EXCEL

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


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

比如标红这几处怎么定义变量?在外面会定义,但函数里与函数外是怎么个对应关系搞不懂。
如:要定义WS和WB怎么定义?

Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k) '这个变量K是函数外面For k As Integer=1 To wb.worksheets.Count循环的,而WB是Dim wb=app.WorkBooks.open(file)来的,
怎么带进到函数中,老师给举个例子呗。

    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
    '获取最大列
    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
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 Is Nothing  Then
    Continue For
End If
Dim ary = rg.value
For i As Integer=1 To RowsMax
    For j As Integer = 1 To ColsMax
        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
            lbl11.text= "Sheet名称:" & ws.name
            rg(i, j).Value= dic(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), ""))
        End If
    Next
Next


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


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

参考:http://www.foxtable.com/webhelp/topics/1486.htm,先看看函数怎么传递和定义参数

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


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

这个我看过,但达到灵活运用还是差点意思。麻烦老师拿我的代码给举个例子吧,谢谢!

如:要定义WS和WB怎么定义?
Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k) '这个变量K是函数外面For k As Integer=1 To wb.worksheets.Count循环的,而WB是Dim wb=app.WorkBooks.open(file)来的,

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


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

dim ws  = args(0)
dim wb  = args(1)
……


调用
For k As Integer=1 To wb.worksheets.Count
            output.show(1)
            If Wb.WorkSheets(k).Visible <> 0 Then        '如果sheet表为不隐藏时处理(0隐藏,-1为不隐藏
                Dim Ws As MSExcel.WorkSheet=Wb.WorkSheets(k)
Functions.AsyncExecute("abc",Ws,wb  )
        End If '不处理隐藏sheet
Next


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


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

只放这段,如何定义参数?标红的都是变量(下面这段代码本身就在自定义函数里)

For i As Integer=1 To RowsMax
    For j As Integer = 1 To ColsMax
        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
    Next
Next
[此贴子已经被作者于2021/5/11 16:50:02编辑过]

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


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

dim ws  = args(0)
dim wb  = args(1)
dim RowsMax as integer
……

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


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

有什么规律吗?哪些变量要做为参数定义?

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


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

没有规律。要看具体要做什么功能,实现什么业务逻辑。一般变量如果外部用不到的,就放到函数里面定义

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


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

1、这样写对吗?
2、我认为标红处的代码最费时间,所以放到异步执行,这个思路对不?
3、标红代码如果放异步执行,里面变量RowsMax 、ColsMax 执行时是固定不变的吗?不会受外面的代码影响吧?(每次处理不同SHEET时RowsMax 、ColsMax都不同)
dim ws  = args(0)
dim wb  = args(1)
dim RowsMax as integer
dim ColsMax as integer
For k As Integer=1 To wb.worksheets.Count
            If Wb.WorkSheets(k).Visible <> 0 Then
                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
                    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
                Else
                    RowsMax = Numcb1.Value
                    ColsMax = Numcb2.Value
                End If
                Dim  rg As MSExcel.Range =  Ws.Range(Ws.Cells(1,1), Ws.Cells(RowsMax,ColsMax))
                Dim ary = rg.value
                For i As Integer=1 To RowsMax
                    For j As Integer = 1 To ColsMax

                         rg(i, j).Value= dic(ary(i,j).ToLower.Replace(" ","").Replace(chr(10), "").Replace(chr(13), ""))

                    Next
                Next
            End If 
Next

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


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

1/2:基本就这样了
3、函数里定义的变量只能函数里使用,和外部没有关系,互不影响

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