问题描述:

Python使用pandas库实现MySQL查询数据库查到的数据导出Excel表,在设定列宽时报错:AttributeError: 'Worksheet' object has no attribute 'set_column' 代码如下

import pandas as pd
import pandas.io.formats.excel

def downloadExcel():
	# 查询数据库的函数实现部分省略
	sql = "SELECT * FROM XIAOBAIBAI_LOG WHERE ID='666'"
	resList = mysqlData.search(sql) # resList为查询到的结果
	cols = mysqlData.cur.description
	col = []
	for c in cols:
		col.append(c[0]) # 提取数据库的columns作为每列标题
	
	df = pd.DataFrame(list(resList), columes=col)
	pandas.io.formats.excel.header_style = None
	writer = pd.ExcelWriter(r"output/XIAOBAIBAI_LOG.xls")
	df.to_excel(writer, sheet_name='XIAOBAIBAI_LOG')
	worksheet = writer.sheets['XIAOBAIBAI_LOG']
	worksheet.set_column("A:A",15) # 设置A列宽度为15
	writer.save()
	writer.close()

解决方案:

看了很多解决 AttributeError: 'Worksheet' object has no attribute 'set_column' 错误的方案,尝试了都没有解决,结果发现一个小细节,原因竟然是Excel导出后缀的问题,之前对Excel的操作都保存为 .xls 格式,也没有问题,但是使用 set_column 方法出现报错了,把后缀改为.xlsx 报错就没有了。

	writer = pd.ExcelWriter(r"output/XIAOBAIBAI_LOG.xlsx")

其他可能原因分析:

后续这里会陆续贴一些其他情况导致这个报错的解决方案
1、未安装Xlsxwriter,可参考:
AttributeError:“工作表”对象没有属性“ set_column”

2、在最新版的openpyxl模块中已删除报错对应的功能或换了方法名,可参考:
openpyxl no attribution error

3、openpyxl版本问题、安装包缺失问题,参考文章:
Attributeerror: ‘worksheet’ object has no attribute 'insert_cols’的解决办法

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐