在Python中检测Excel文件的EOF
我写了一段代码,用来检测一个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: