Python使用XLUtils读取Excel时空单元格返回None值如何解决
问题原因
- openpyxl读取Excel空单元格时,
cell.value属性默认返回None,这是框架的默认行为。 - XLUtils中
getRowCount方法统计的是工作表所有被标记为「已使用」的行的总数,而非仅包含有效数据的行数。如果之前在后续行输入过内容再删除,Excel仍会将这些行标记为已使用,导致循环范围超出实际有数据的行,遍历空行时就会持续输出None。
解决方法
1. 处理空单元格返回None的问题
修改readData方法,对返回值做默认值替换,比如空单元格返回空字符串:
def readData(file,sheetName,rownum,columnno): workbook = openpyxl.load_workbook(file) # 注意:get_sheet_by_name已被弃用,推荐直接用方括号获取工作表 sheet = workbook[sheetName] value = sheet.cell(row=rownum,column=columnno).value # 空单元格返回空字符串,也可以根据需求替换为其他默认值 return value if value is not None else ""
2. 避免遍历无有效数据的空行
调整遍历逻辑,遇到连续空行时提前终止循环,修改执行业务代码如下:
import XLUtils path = "C:/Users/PycharmProjects/Book2.xlsx" rows=XLUtils.getRowCount(path,'Sheet2') for r in range(2,rows+1): id=XLUtils.readData(path,"Sheet2",r,1) url=XLUtils.readData(path,"Sheet2",r,2) # 两列均无有效值时,默认后续无有效数据,终止循环 if not id and not url: break print(id) print(url)
如果需要保留None值不做替换,也可以在打印前增加非空判断,仅输出有值的内容即可。
内容的提问来源于stack exchange,提问作者SKK
相关产品推荐
相关产品推荐

