用python面向对象的方法来写,读取输入路径下所有的excel文件,读取excel中sheet_name=”功能点拆分表“中的内容,将”功能点拆分表“这个工作簿中的所有内容整合到一个新的excel文件中并保留原来单元格中的颜色
时间: 2024-03-26 22:36:26 浏览: 75
好的,下面是一个使用面向对象方法读取excel并整合到一个新文件中的示例代码。代码中使用了openpyxl库来读写excel文件。
```
from openpyxl import load_workbook, Workbook
from openpyxl.styles import PatternFill
import os
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.row_index = 1
self.fill = PatternFill(fill_type='solid', start_color='FFFFFF', end_color='FFFFFF')
self.cell_style = {}
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)
if cell.has_style:
self.cell_style[cell.coordinate] = cell.style
else:
self.sheet.cell(row=self.row_index, column=cell.column).fill = self.fill
self.row_index += 1
for cell_coordinate, style in self.cell_style.items():
self.sheet[cell_coordinate].style = style
self.workbook.save(self.output_path)
```
在这个类中,我们首先在`__init__`方法中初始化了一些参数(输入路径、输出路径、工作簿、工作表、行索引、填充样式和单元格样式)。
`merge`方法中使用了`os.listdir`函数列出了输入路径下的所有文件,并依次读取其中的excel文件。如果文件名不是以`.xlsx`结尾,就跳过。如果工作簿中没有名为“功能点拆分表”的工作表,也跳过。否则,就读取工作表中的内容,并将其整合到新的工作簿中。
在将单元格内容复制到新工作簿时,我们还将单元格的填充样式复制到了新工作簿中。由于样式对象(Style)是不可哈希的,我们使用了一个字典来存储单元格的样式,并在保存新工作簿时将样式应用到单元格中。
使用这个类,你可以按照以下方式调用:
```
merger = ExcelMerger(input_path='path/to/input', output_path='path/to/output')
merger.merge()
```
其中`input_path`是输入路径,`output_path`是输出路径。调用`merge`方法后,程序将读取`input_path`下的所有excel文件,并将其中名为“功能点拆分表”的工作表整合到一个新的excel文件中,保存到`output_path`中。保存的新文件中保留了原单元格中的颜色。
阅读全文