1.首先,问题的解决办法:
是因为列宽设置出错了,有一行设置列宽的时候,忘记加.width来设置了:
sheet.column_dimension["A"] = 20 # 错误,没有加.width,竟然不报这行出错,巨坑
# 以下改正后
sheet.column_dimension["A"].width = 20
""" 补充,若想使用数字索引来设置列宽,则需要将数字转换为对应列的字母
因为openpyxl的设计是参考了excel表格的设计的:
列号使用字母(必须是str)标识,行号使用数字(必须是int表示)
openpyxl提供了一个属性可以用于读取某单元格的列字母序号,可以用于将数字索引转换为字母序号
"""
col_letter = sheet.cell(row=1, column=2).column_letter # 假设要转换第2列,得到列的字母序号
print(f"转换后序号为{col_letter}")
sheet.column_dimension[col_letter] = 20
2.问题的坑分析:
报错信息如下
float object has no attribute reindex
______
_____________
_________________
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问
报错定位的最后出现错误的代码行是:
workbook.save(file_path)
这个报错在这一行,让我误以为是保存文件时发生错误,于是排查了很久到底是否有重复进程或者重复打开文件,后面发现并没有这个问题
然后,我又去排查了是不是函数传参导致的问题,后面试了很久还是没有头绪。然后开始排查代码内部每一句的错误,最后查了下float object has no attribute reindex,正好在stackOverFlow看到有个人遇到类似的问题,再排查我自己的代码,才发现错误所在。