2010-09-24 60 views
2

我已经写了代码使用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 

我期望while循环将停止,则x变成了“空白单元格”,这我支持成为None,但它不起作用,并且它转到len(x)并提示我一个NoneType没有len的错误。为什么?

谢谢!

回答

3

这这里是你的问题:

if type(x) is None: 

如果x是无,其是NoneType。因此,这从来都不是真的,所以你永远不会看到空白的单元格,并最终尝试获取None的长度。

你应该写:

if x is None: 
3

看起来你正在使用pywin32com ...... 你不需要环路周围发现“EOF”(你的意思是表的末尾,而不是文件结束)。

如果xlws是指一个工作表对象时,您可以使用此:

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

获得在工作表中有效的行数。 used.Row是第一个使用行的从1开始的行号,并且used.Rows.Count的含义应该是相当明显的。

替代方案:使用xlrd ... [dis] claimer:我是作者。

+0

我用xlrd和xlwt所有的时间:) – 2010-09-24 05:02:59

+0

哇,这是更好! 我也想用xlrd,但是我的xls文件是密码保护的 – lokheart 2010-09-24 05:47:22

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)