使用openpyxl、xlsxwriter写入Excel时报错如何解决?
两个Excel写入报错的原因及解决方案
1. openpyxl抛出openpyxl.utils.exceptions.IllegalCharacterError
报错原因
openpyxl写入字符串时会强制校验字符合法性,不允许写入ASCII控制字符(\0、\x01-\x1f范围内的不可见控制符,部分未定义的特殊Unicode字符也会被拦截),你的data变量转字符串后包含了这类非法字符,触发校验失败报错。
解决方法
写入前用正则清洗掉所有非法控制字符,保留Excel允许的换行、回车、制表符即可:
import re import openpyxl wb = openpyxl.load_workbook('results.xlsx') wb.create_sheet('Output') ws = wb['Output'] # 过滤非法控制字符,保留常用的可识别控制符 illegal_pattern = re.compile(r'[\x00-\x08\x0b-\x0c\x0e-\x1f]') cleaned_data = illegal_pattern.sub('', str(data)) ws.append([cleaned_data]) wb.save('results.xlsx') wb.close()
注:原代码中你没有调用
wb.save(),即使不报错修改也不会写入到文件中,需要补充保存逻辑。
2. xlsxwriter抛出AttributeError: 'NoneType' object has no attribute 'group'
报错原因
你调用worksheet.write()的参数格式错误:xlsxwriter的write方法要求前两个参数必须为写入位置的行索引、列索引(从0开始计数),第三个参数才是写入内容。你仅传入了data一个参数,方法内部参数解析逻辑拿到预期外的空值,触发属性调用报错。
解决方法
补全写入位置参数,写完后调用close保存文件即可:
import xlsxwriter workbook = xlsxwriter.Workbook('results.xlsx') worksheet = workbook.add_worksheet('Output') # 示例是写入到A1单元格(行索引0,列索引0),可按需调整位置 worksheet.write(0, 0, str(data)) workbook.close()
内容的提问来源于stack exchange,提问作者be_real
相关产品推荐
相关产品推荐

