使用读取文件夹下所有excel文件中sheet_name=“功能点拆分表”的工作簿,需要识别单元格的颜色为黄色或红色的单元格,并提取单元格的信息,其他为空的单元格向上合并单元格,合并列表生成EXCEL后导出,给出面向对象代码
时间: 2024-03-26 14:36:10 浏览: 143
好的,以下是一个面向对象的Python代码,实现了您的要求:
```python
import os
import pandas as pd
from openpyxl import load_workbook
import xlwings as xw
class ExcelProcessor:
def __init__(self, folder_path):
self.folder_path = folder_path
self.sheet_name = '功能点拆分表'
self.yellow_color = 'FFFF00' # 黄色
self.red_color = 'FF0000' # 红色
def read_excel_files(self):
# 读取文件夹下所有excel文件中sheet_name为self.sheet_name的工作簿,返回一个数据框
all_data = []
for file_name in os.listdir(self.folder_path):
if file_name.endswith('.xlsx'):
file_path = os.path.join(self.folder_path, file_name)
wb = load_workbook(file_path)
if self.sheet_name in wb.sheetnames:
ws = wb[self.sheet_name]
data = pd.DataFrame(ws.values)
header = data.iloc[0]
data = data[1:]
data.columns = header
all_data.append(data)
return pd.concat(all_data)
def process_data(self, data):
# 处理数据,提取颜色为黄色或红色的单元格信息,向上合并空单元格
for row_idx, row in data.iterrows():
for col_name, cell in row.items():
if cell.fill.start_color.index == self.yellow_color or \
cell.fill.start_color.index == self.red_color:
# 提取颜色为黄色或红色的单元格信息
print(cell.value)
elif pd.isna(cell.value):
# 向上合并空单元格
merge_range = cell
for i in range(row_idx - 1, -1, -1):
if pd.isna(data.iloc[i][col_name]):
merge_range = merge_range.union(data.iloc[i][col_name])
else:
break
data.loc[merge_range][col_name] = cell.value
data.loc[row_idx][col_name] = None
# 删除空行
data.dropna(how='all', inplace=True)
return data
def write_to_excel(self, data):
# 将数据框写入到新的Excel文件中
wb = xw.Book()
sheet = wb.sheets[0]
sheet.name = self.sheet_name
sheet.range('A1').options(index=False).value = data
wb.save(os.path.join(self.folder_path, 'result.xlsx'))
def process_excel_files(self):
data = self.read_excel_files()
processed_data = self.process_data(data)
self.write_to_excel(processed_data)
if __name__ == '__main__':
folder_path = 'your/folder/path'
excel_processor = ExcelProcessor(folder_path)
excel_processor.process_excel_files()
```
在这个代码中,ExcelProcessor类封装了读取、处理和写入Excel文件的方法。用户只需要实例化该类,传入文件夹路径,然后调用process_excel_files方法即可实现对所有Excel文件的处理。
其中,read_excel_files方法使用了pandas的concat函数来合并所有Excel文件的数据框,process_data方法遍历所有单元格,提取颜色为黄色或红色的单元格信息,并向上合并空单元格。write_to_excel方法使用了xlwings库将数据框写入到新的Excel文件中。
希望这个代码能够帮助您实现您的需求,如果您有任何问题或意见,请随时提出。
阅读全文