from openpyxl import load_workbook, Workbook from openpyxl.styles import PatternFill class ExcelMerger: def __init__(self, input_path, output_path): self.input_path = input_path self.output_path = output_path self.workbook = Workbook() self.sheet = self.workbook.active self.fill = PatternFill(fill_type='solid', start_color='FFFFFF', end_color='FFFFFF') self.row_index = 1 def merge(self): for filename in os.listdir(self.input_path): if not filename.endswith('.xlsx'): continue filepath = os.path.join(self.input_path, filename) workbook = load_workbook(filepath, data_only=True) if '功能点拆分表' not in workbook.sheetnames: continue sheet = workbook['功能点拆分表'] for row in sheet.rows: self.sheet.row_dimensions[self.row_index].height = sheet.row_dimensions[row[0].row].height for cell in row: if cell.value is not None: self.sheet.cell(row=self.row_index, column=cell.column, value=cell.value) self.sheet.cell(row=self.row_index, column=cell.column).fill = cell.fill else: self.sheet.cell(row=self.row_index, column=cell.column).fill = self.fill self.row_index += 1 self.workbook.save(self.output_path)上述修改后的代码仍然出现TypeError: unhashable type: 'StyleProxy'的错误,怎么解决
时间: 2024-02-14 17:17:42 浏览: 170
这个问题通常是由于样式对象(Style)是不可哈希的导致的。在这种情况下,你需要将样式对象转换为可哈希的对象,或者使用其他数据结构来代替字典。
你可以尝试将样式对象转换为字符串,然后将字符串作为键来使用。例如,可以使用`str(style)`来获取样式对象的字符串表示形式,并将其用作字典的键,如下所示:
```
cell_style = {}
...
if cell.has_style:
cell_style[cell.coordinate] = str(cell.style)
...
```
这样就可以避免`TypeError: unhashable type: 'StyleProxy'`错误。
当然,这只是一种解决方案,具体如何修改代码需要根据具体情况而定。
相关问题
from openpyxl import load_workbook的作用
该语句的作用是导入openpyxl库中的load_workbook模块,用于读取Excel文件中的工作簿数据。通过使用该模块,可以在Python中打开Excel文件并读取其中的数据,然后进行进一步的处理。
from selenium import webdriver from selenium.webdriver.chrome.options import Options from openpyxl import load_workbook import time
您好!您提供的代码是使用 Selenium、Chrome WebDriver、Openpyxl 进行操作的示例代码。这段代码的功能是使用 Selenium 控制 Chrome 浏览器进行网页自动化操作,并使用 Openpyxl 进行 Excel 文件的读写操作。
如果您有任何关于这段代码的问题或需要进一步的帮助,请告诉我。
阅读全文