'Sheet' object has no attribute 'max_column' 为何报错?如何改正
时间: 2023-10-03 15:08:35 浏览: 239
这个错误通常是因为你正在使用较旧的版本的 `openpyxl` 库,而该库的版本不支持 `max_column` 属性。
为了解决这个问题,你需要升级到 `openpyxl` 的最新版本。可以通过运行以下命令在命令行中升级:
```
pip install --upgrade openpyxl
```
如果你已经安装了 `openpyxl`,则可以使用以下命令升级到最新版本:
```
pip install --upgrade openpyxl
```
升级后,应该能够使用 `max_column` 属性了。
相关问题
AttributeError: 'Sheet' object has no attribute 'max_row'
引用\[1\]: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() 解决方案: 。 引用\[2\]:看了很多解决 AttributeError: 'Worksheet' object has no attribute 'set_column' 错误的方案,尝试了都没有解决,结果发现一个小细节,原因竟然是Excel导出后缀的问题,之前对Excel的操作都保存为 .xls 格式,也没有问题,但是使用 set_column 方法出现报错了,把后缀改为.xlsx 报错就没有了。 writer = pd.ExcelWriter(r"output/XIAOBAIBAI_LOG.xlsx") 其他可能原因分析: 。 引用\[3\]:sheet.get_highest_row()和sheet.get_highest_column()在多年前就已经弃用了,现在用的是: sheet.max_row和sheet.column 再次启动:(就不会报错了) 搞定!。 问题:AttributeError: 'Sheet' object has no attribute 'max_row'
回答: 在你的代码中,出现了两个不同的错误。首先,关于'Worksheet' object has no attribute 'set_column'的错误,这是因为你使用了旧版本的Excel文件格式(.xls)。解决方法是将文件后缀改为.xlsx,即writer = pd.ExcelWriter(r"output/XIAOBAIBAI_LOG.xlsx")。\[2\]其次,关于'AttributeError: 'Sheet' object has no attribute 'max_row''的错误,这是因为你使用了过时的方法sheet.get_highest_row()和sheet.get_highest_column()。正确的方法是使用sheet.max_row和sheet.column。\[3\]通过更正这两个错误,你应该能够成功导出Excel文件并设置列宽。
#### 引用[.reference_title]
- *1* *2* [Python错误: AttributeError: ‘Worksheet‘ object has no attribute ‘set_column‘ 解决办法](https://blog.csdn.net/qq_39691492/article/details/119757362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [Python Error解决方案AttributeError: ‘ReadOnlyWorksheet‘ object has no attribute ‘get_highest_row...](https://blog.csdn.net/XRTONY/article/details/113818112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
AttributeError: 'Sheet' object has no attribute 'iter_rows'
对不起,我之前给出的代码中使用了错误的方法。在openpyxl中,Sheet对象没有名为`iter_rows()`的属性。
要在openpyxl中获取特定范围内单元格的值,可以使用`iter_cols()`和`iter_rows()`方法。以下是一个示例代码,展示如何解决这个问题:
```python
import openpyxl
# 打开Excel文件
workbook = openpyxl.load_workbook('your_file.xlsx')
# 选择第一个工作表
sheet = workbook.active
# 获取第2列的倒数第一行到倒数第六行的值
column2_values = [cell.value for cell in sheet['B'][-6:-1]]
# 获取第3列到第10列的双数列
double_columns = [column for idx, column in enumerate(sheet.iter_cols(min_col=3, max_col=10)) if (idx+3) % 2 == 0]
# 遍历每一行,将最小值赋值给第2列的对应位置
for i, row in enumerate(double_columns, start=-5):
min_value = min([cell.value for cell in row])
sheet.cell(row=i, column=2).value = min_value
# 保存修改后的Excel文件
workbook.save('your_file.xlsx')
```
在上述代码中,我们使用`sheet['B'][-6:-1]`来获取第2列的倒数第一行到倒数第六行的单元格对象。然后,我们使用`sheet.iter_cols(min_col=3, max_col=10)`来获取第3列到第10列的单元格对象。注意,我们使用了`enumerate()`函数来获取循环索引,以便在计算列号时使用。最后,我们遍历每一行,找到最小值,并将其赋值给第2列对应的单元格。
请确保你已经正确安装了openpyxl库,并根据你的实际情况进行适当的调整。如果你遇到了其他问题,请提供更多上下文或具体的错误消息,以便我能够更好地帮助你解决问题。
阅读全文