使用xlsxwriter操作Excel时报Worksheet无cell属性错误如何解决
报错原因
报错本质是混用了不同Excel处理库的接口,API不匹配:
- 你初始化写入对象时指定
engine='xlsxwriter',此时writer.sheets['Sheet1']返回的是xlsxwriter库的Worksheet实例,这个类本身没有cell()方法,cell()是openpyxl库操作单元格的专属接口。 - 你代码里调用的
Font样式类也是openpyxl提供的,和xlsxwriter的样式定义逻辑完全不兼容,无法直接跨库使用。
修复方案
你可以根据自己的使用习惯二选一:
方案1:适配xlsxwriter引擎的原生写法(无需更换依赖)
xlsxwriter要求样式提前通过工作簿对象的add_format方法注册,再绑定到对应单元格,注意xlsxwriter的行列索引从0开始计数。
修正后代码:
import pandas as pd # 初始化写入对象 writer = pd.ExcelWriter(path, engine='xlsxwriter') # 替换df为你自己的DataFrame变量名,先把数据写入工作表 df.to_excel(writer, sheet_name='Sheet1', index=False) worksheet = writer.sheets['Sheet1'] # 定义目标字体样式 col_style = writer.book.add_format({ 'font_name': 'Reem Kufi', 'font_size': 12, 'font_color': '#DB3B22', 'italic': True }) # 遍历设置第2-39行、第3列的单元格样式(对应xlsxwriter行索引1-38,列索引2) for row_idx in range(1, 39): # 传入None代表保留单元格原有值,仅覆盖样式 worksheet.write(row_idx, 2, None, col_style) # 如果不想写循环,也可以直接对指定区域批量设置样式,效率更高 # worksheet.conditional_format('C2:C39', {'type': 'no_errors', 'format': col_style}) writer.close()
方案2:更换引擎为openpyxl,复用你原有逻辑
如果你更习惯openpyxl的单元格操作语法,直接把写入引擎换成openpyxl即可,注意提前安装openpyxl依赖。这种方式下你原来写的行、列索引(从1开始计数)不需要调整。
修正后代码:
import pandas as pd from openpyxl.styles import Font # 更换引擎为openpyxl writer = pd.ExcelWriter(path, engine='openpyxl') # 替换df为你自己的DataFrame变量名,写入数据 df.to_excel(writer, sheet_name='Sheet1', index=False) worksheet = writer.sheets['Sheet1'] col_style = Font(name="Reem Kufi", size=12, color="DB3B22", italic=True) # 原有循环逻辑不需要修改 for i in range(2, 40): worksheet.cell(row=i, column=3).font = col_style writer.close()
内容的提问来源于stack exchange,提问作者ZAVERI SIR
相关产品推荐
相关产品推荐

