Foxtable(狐表)用户栏目专家坐堂 → 如何判断EXCEL单元格中是否有内容?


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

主题:如何判断EXCEL单元格中是否有内容?

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
如何判断EXCEL单元格中是否有内容?  发帖心情 Post By:2016/5/23 12:11:00 [只看该作者]

如何判断EXCEL单元格中是否有内容?有的单元格明明是空的,但有可能被设置了格式,所以此类单元格不被认为是空,如何实现准确判断?看得见的为非空,看不见的就为空

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/23 12:16:00 [只看该作者]

 什么意思?直接判断 Sheet(0,0).Text 不行?

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


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

SORRY,我没有表述清楚,见如下代码:

Dim Book As New XLS.Book("d:\temp\2.xlsx")

For k As Integer = 0 To Book.Sheets.Count-1 '//多个sheet的处理
         Dim Sheet = Book.Sheets(k)
                For i As Integer = 0 To Sheet.Rows.Count-1
                    For j As Integer = 0 To Sheet.Cols.Count -1
                        If sheet(i,j).text > "" Then
                                Dim dr As DataRow = DataTables("排重表").AddNew
                                dr("第一列") = sheet(i,j).Text
                        End If
                    Next
                Next
Next

见附件EXCEL,
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:2.xlsx


如上代码输出:output.show(Sheet.Rows.Count)值为3行,output.show(Sheet.Cols.Count)值为:16384列(EXCEL在操作时选择了整个表设置了字体,所以默认16384列都被记数了)
而实际上EXCEL表格就3行,1列。如何让循环的终止值只处理有内容的列数,没有内容的列不处理,可以减少循环次数提高效率。

实际应用上表格有内容的行和列不固定,随机的。我只想处理有内容的行和列,空白的列不去处理,如何实现?
[此贴子已经被作者于2016/5/23 14:13:23编辑过]

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


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

我想减少循环次数,有多少列实际有内容的就循环到这些列。

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


加好友 发短信
等级:小狐 帖子:392 积分:3312 威望:0 精华:0 注册:2014/4/9 10:04:00
  发帖心情 Post By:2016/5/23 14:32:00 [只看该作者]

麻烦老师帮忙看看

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/23 14:51:00 [只看该作者]

用第一行和第一列确定范围

 

Dim Book As New XLS.Book("d:\test.xls")


For k As Integer = 0 To Book.Sheets.Count-1 '//多个sheet的处理
    Dim Sheet = Book.Sheets(k)
    Dim rc As Integer = 0
    Dim cc As Integer = 0
    For i As Integer = 0 To Sheet.Rows.Count-1
        If sheet(i, 0).Text = "" Then
            rc = i
            Exit For
        End If
    Next
    For i As Integer = 0 To Sheet.Cols.Count-1
        If sheet(0, i).Text = "" Then
            cc = i
            Exit For
        End If
    Next
    msgbox(rc & " " & cc)
    For i As Integer = 0 To rc
        For j As Integer = 0 To cc
            If sheet(i,j).text > "" Then
                Dim dr As DataRow = DataTables("排重表").AddNew
                dr("第一列") = sheet(i,j).Text
            End If
        Next
    Next
Next


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


加好友 发短信
等级:小狐 帖子:392 积分:3312 威望:0 精华:0 注册:2014/4/9 10:04:00
  发帖心情 Post By:2016/5/23 15:05:00 [只看该作者]

感谢老师,这个思路挺好的, 但我弄到程序里有些问题,目前好像只能提取第一行数据,另外如果碰到有空的列或行是不是程序就跳出循环了?
表格没有规律,有效内容中会有空行,也会有空的列。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/23 15:09:00 [只看该作者]

 那你就不要全选所有单元格设置字体啊,你操作了多少,最后就会获取多少的啊。

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


加好友 发短信
等级:小狐 帖子:392 积分:3312 威望:0 精华:0 注册:2014/4/9 10:04:00
  发帖心情 Post By:2016/5/23 15:14:00 [只看该作者]

EXCEL我们没办法控制,都是客户给的,他们为了方便怎样操作的都有。
[此贴子已经被作者于2016/5/23 15:19:49编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/23 15:20:00 [只看该作者]

 那没办法,你试试用vba

 

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\Report.xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.UsedRange
MessageBox.Show(Rg.Rows.Count)
MessageBox.Show(Rg.Columns.Count)
MessageBox.Show(Rg.Count)
App.Quit


 回到顶部
总数 27 1 2 3 下一页