在Python中检测Excel文件的EOF

2 投票
3 回答
4874 浏览
提问于 2025-04-16 04:32

我写了一段代码,用来检测一个Excel文件的结束(EOF),是用Python写的:

row_no = 1
while True:
    x = xlws.Cells(row_no,1).value
    if type(x) is None:
        break
    else:
        print(len(x))
        print(x)
    row_no = row_no + 1

我本来以为当循环到一个“空单元格”时,x会变成None,这样循环就会停止。但是它并没有这样做,反而继续执行len(x),结果给我提示说NoneType没有长度。为什么会这样呢?

谢谢!

3 个回答

0

正如其他评论中提到的,你也可以使用'xlrd'这个库来了解Excel文件的限制,具体用法如下:

workbook = xlrd.open_workbook (excel_loc)
excel_sheet = workbook.sheet_by_index(0)

print("no of rows: %d" %excel_sheet.nrows)
print("no of cols: %d" %excel_sheet.ncols)
3

看起来你在使用 pywin32com ... 你不需要循环去找“EOF”(你指的是工作表的结束,而不是文件的结束)。

如果 xlws 是一个工作表对象,你可以这样做:

used = xlws.UsedRange
nrows = used.Row + used.Rows.Count - 1

这样可以获取工作表中有效的行数。used.Row 是第一个被使用的行的行号(从1开始),而 used.Rows.Count 的意思应该很明显。

另外一种方法是使用 xlrd ... [免责声明:我是这个库的作者]

4

这里就是你的问题所在:

if type(x) is None:

如果x是None,那么它的类型就是NoneType。因此,这个条件永远不会成立,所以你看不到空单元格,最后你会尝试去获取None的长度。

相反,你应该这样写:

if x is None:

撰写回答