以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  老师帮忙看看这个判断和循环是不是有问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=92748)

--  作者:wh420
--  发布时间:2016/11/11 16:36:00
--  老师帮忙看看这个判断和循环是不是有问题?
EXCEL中只有一个SHEET一列两行数据,其中有一行是隐藏的,执行下列代码后感觉循环了很多遍才结束(当cbox2.Checked=false不被选中的情况下),老师帮忙看看是不是哪里有问题?

For i As Integer = 1 To rg.Rows.Count
                    If CBox2.Checked OrElse rg.Rows(i).height <> 0 Then
\'msgbox(1)
                        For j As Integer = 1 To rg.Columns.Count
\'msgbox(2)
                            If CBox2.Checked OrElse rg.Columns(j).width <> 0 Then
\'msgbox(3)
                                If ary(i,j) <> Nothing Then
\'msgbox(4)
                                    If CBox1.Checked = False OrElse CBox1.Checked = True AndAlso System.Text.RegularExpressions.Regex.Match(ary(i,j),"[\\u4e00-\\u9fa5]+").Tostring()>""
\'msgbox(5)
                                        Dim dr As DataRow = DataTables("内容").AddNew
                                        dr("原文") = ary(i, j)
                                        lbl5.text ="提取内容:" & ary(i,j)
                                    End If
                                End If
                            End If
                        Next
                    End If
                Next

--  作者:有点蓝
--  发布时间:2016/11/11 17:10:00
--  
看不出什么问题。上例子看看
--  作者:有点色
--  发布时间:2016/11/11 17:56:00
--  

rg.Rows.Count 应该有问题。

 

excel里面的有效行,可能并不是你看到的,一些被编辑过的也可能被判断为有效行

 

看看这里 http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=28024&skin=0

 


--  作者:wh420
--  发布时间:2016/11/12 0:06:00
--  
如果使用这种方式(n = Range("A65536").End(xlUp).Row)那上面的代码应该如何改写?
--  作者:有点蓝
--  发布时间:2016/11/12 9:25:00
--  
获取实际行数


Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("F:\\H\\问题测试\\abc.xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim r = App.ActiveSheet.Range("A65536").End(MsExcel.XlDirection.xlUp).Row
Output.Show(Ws.UsedRange.Rows.Count)
Output.Show(r)
Dim Rg As MSExcel.Range = Ws.Rows("1:" & r)
Output.Show(Rg.Rows.Count)
App.quit

具体问题上传文件测试

--  作者:wh420
--  发布时间:2016/11/14 10:47:00
--  
Range("A65536")只是获取A列的实际行数,如果要获取所有列的实际行数呢,应该如何写?
--  作者:有点色
--  发布时间:2016/11/14 11:00:00
--  
以下是引用wh420在2016/11/14 10:47:00的发言:
Range("A65536")只是获取A列的实际行数,如果要获取所有列的实际行数呢,应该如何写?

 

参考

 

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("d:\\test.xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim max As Integer = 0
For i As Integer = 1 To ws.UsedRange.columns.count
    Dim r = ws.cells(65536,i).End(MsExcel.XlDirection.xlUp).Row
    If r > max Then
        max = r
    End If
Next
App.quit

msgbox(max)

[此贴子已经被作者于2016/11/14 11:02:21编辑过]

--  作者:客人
--  发布时间:2016/11/14 13:23:00
--  
谢谢老师,明白了不少
不过要同时解决有效行和列的问题 (ws.UsedRange.columns.count有效列)可以实现吗?

--  作者:wh420
--  发布时间:2016/11/14 13:30:00
--  
谢谢老师,明白了不少
不过要同时解决有效行和列的问题 (ws.UsedRange.columns.count有效列)可以实现吗?

--  作者:wh420
--  发布时间:2016/11/14 14:10:00
--  
有点色老师,在吗,您帮我看看以上的程序能否同时解决:准确获取sheet中有效数据行和有效数据列的问题?