Python将Excel合并到CSV Unicode问题

时间:2017-01-03 20:02:36

标签: python unicode openpyxl

我在这里有一些示例代码,其中我使用openpyxl库将目录中的所有.xlsx文件转换为.csv文件...但是我得到了一个' AttributeError:& #39; NoneType'对象没有属性'编码'' - 如何调整下面的代码,以便cell.value如果是NoneType则不会被编码?感谢。

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])

2 个答案:

答案 0 :(得分:1)

您需要明确地测试None并使用替换,可能是空字符串。

c.writerow([b'' if cell is None else cell.value.encode("utf-8") for cell in r])

答案 1 :(得分:0)

您似乎在空单元格上调用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])