使用读取文件夹下所有excel文件中sheet_name=“功能点拆分表”的工作簿,需要识别字段的颜色并提取单元格的信息,其他为空的单元格向上合并单元格,合并列表生成EXCEL后导出
时间: 2024-03-26 12:34:32 浏览: 55
以下是实现该功能的代码,注释中有详细说明:
```python
import os
from openpyxl import load_workbook,Workbook
from openpyxl.styles import PatternFill
# 定义需要读取的文件夹路径
folder_path = 'excel_files'
# 定义颜色对应的值
color_value = {
'FFFFC000': '-',
'FFFFFF00': 'x',
'FF00B0F0': '√'
}
# 定义合并单元格的函数
def merge_cells(ws, row, col):
# 向上遍历单元格,找到第一个不为空的单元格
while row > 1 and ws.cell(row=row-1, column=col).value is None:
row -= 1
# 如果当前单元格和上方单元格的值相同,则合并单元格
if row > 1 and ws.cell(row=row, column=col).value == ws.cell(row=row-1, column=col).value:
ws.merge_cells(start_row=row, end_row=row, start_column=col, end_column=col)
return row-1
return row
# 定义一个工作簿对象
wb_out = Workbook()
# 遍历文件夹下的所有文件
for filename in os.listdir(folder_path):
if filename.endswith('.xlsx'):
print(f'正在处理文件 {filename}')
# 打开工作簿
wb_in = load_workbook(os.path.join(folder_path, filename))
# 选择需要处理的工作表
ws_in = wb_in['功能点拆分表']
# 创建新的工作表
ws_out = wb_out.create_sheet(title=filename.split('.')[0])
# 遍历单元格
for row in ws_in.iter_rows():
for cell in row:
# 如果单元格颜色在字典中,则提取对应的值
if isinstance(cell.fill, PatternFill) and cell.fill.fgColor.rgb in color_value:
value = color_value[cell.fill.fgColor.rgb]
else:
value = cell.value
# 如果单元格为空,则向上合并单元格
if value is None:
row_idx, col_idx = cell.row, cell.column
while value is None and row_idx > 1:
row_idx = merge_cells(ws_in, row_idx, col_idx)
value = ws_in.cell(row=row_idx, column=col_idx).value
# 将值写入新的工作表
ws_out.cell(row=cell.row, column=cell.column, value=value)
# 删除默认的工作表
wb_out.remove(wb_out['Sheet'])
# 保存新的工作簿
wb_out.save('output.xlsx')
```
该代码会遍历指定文件夹下的所有 `.xlsx` 文件,对每个文件中的名为“功能点拆分表”的工作表进行处理。对于每个单元格,如果其颜色在 `color_value` 字典中,则提取对应的值。如果单元格的值为空,则向上遍历单元格并找到第一个不为空的单元格,然后将这些单元格合并为一个单元格。最后将处理后的结果写入新的工作簿并导出。
阅读全文