上述代码为什么会报错TypeError: unhashable type: 'StyleProxy'
时间: 2023-07-24 09:23:02 浏览: 325
这个错误通常是由于单元格的填充颜色等格式信息无法被哈希化(hash)而引起的。在这种情况下,需要使用 `copy` 方法复制单元格的格式信息,而不是直接将它们赋值给新单元格。
以下是修改后的代码,可以解决这个问题:
```python
import openpyxl
from openpyxl.utils import get_column_letter
# 读取所有要合并的表格,将它们存储在一个列表中
workbooks = ['workbook1.xlsx', 'workbook2.xlsx', 'workbook3.xlsx']
sheets = []
for workbook in workbooks:
wb = openpyxl.load_workbook(workbook)
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
sheets.append(sheet)
# 创建一个新的工作簿,并复制第一个表格到其中
merged_workbook = openpyxl.Workbook()
merged_sheet = merged_workbook.active
merged_sheet.title = sheets[0].title
for row in sheets[0].rows:
for cell in row:
merged_sheet[cell.coordinate].value = cell.value
merged_sheet[cell.coordinate]._style = cell._style.copy() # 复制格式信息
# 将其他表格的内容复制到新工作簿中
for sheet in sheets[1:]:
new_sheet = merged_workbook.create_sheet(title=sheet.title)
for row in sheet.rows:
for cell in row:
new_sheet[cell.coordinate].value = cell.value
new_sheet[cell.coordinate]._style = cell._style.copy() # 复制格式信息
# 保存新工作簿
merged_workbook.save('merged_workbook.xlsx')
```
在这个版本的代码中,我们使用了 `_style.copy()` 方法来复制单元格的格式信息。这样可以避免将无法哈希化的格式信息直接赋值给新单元格,从而避免了 `TypeError` 错误的发生。
阅读全文