我这里有一些示例代码,其中我使用 openpyxl 库将目录中的所有.xlsx文件转换为.csv文件......但是我收到一个"属性错误:"NoneType"对象没有属性"编码"-如果cell.value是NoneType,我如何调整下面的代码,以便cell.value不会被编码? 谢谢。
import openpyxl
import csv
from glob import glob
with open('All.csv', 'ab') as f:
for filename in sorted(glob("*.xlsx")):
wb = openpyxl.load_workbook(filename)
sh = wb.get_active_sheet()
with open('All.csv', 'ab') as f:
c = csv.writer(f)
for r in sh.rows:
c.writerow([cell.value.encode("utf-8") for cell in r])
您需要
显式测试None
并使用替代,可能是空字符串。
c.writerow([b'' if cell is None else cell.value.encode("utf-8") for cell in r])
看起来您正在空单元格上调用encode()
。您可能需要添加一些内容来检查您尝试添加的单元格是否为无值,并提供您希望它包含的替代值来表示单元格的不存在/空/无:
for r in sh.rows:
newrow = []
for cell in r:
if cell.value:
newrow += cell.value.encode("utf-8")
elif cell.value == None:
newrow += ''
c.writerow(newrow)
但是为了保持您的列表理解的美观性,我们可以改为以下内容:
for r in sh.rows:
c.writerow([cell.value.encode("utf-8") if cell.value is not None else '' for cell in r])