python用walk合并所给文件目录下所有的excel文件,提取sheet_name=”功能点拆分表“的列名为”子过程描述“的单元格内的批注,放入新建的列名为”批注“的空列中,同时识别”子过程描述“列下单元格的颜色,若为白色为0黄色为1红色为2,将其写入到新建的列”颜色“下
时间: 2024-03-27 07:41:35 浏览: 87
好的,我来解答您的问题。
可以按照以下步骤实现:
1. 导入必要的库和模块,如os、openpyxl等。
2. 定义一个函数,用于读取单个Excel文件中的数据,提取指定sheet_name下的“子过程描述”列的批注,并记录其单元格的颜色,最后返回提取到的批注和颜色信息。
3. 使用os模块的walk函数遍历所给文件目录下的所有Excel文件,调用上述函数逐一处理,并将提取到的批注和颜色信息写入新建的“批注”和“颜色”列中。
具体实现细节可以参考以下代码示例:
```python
import os
from openpyxl import load_workbook
def read_excel_file(filepath):
# 读取Excel文件
wb = load_workbook(filepath, read_only=True)
# 获取指定sheet_name的工作表
ws = wb['功能点拆分表']
# 获取“子过程描述”列的列名和列索引
column_names = [cell.value for cell in ws[1]]
sub_process_col_index = column_names.index('子过程描述')
# 定义一个字典用于记录批注和颜色信息
data_dict = {}
# 遍历“子过程描述”列下的所有单元格
for row in ws.iter_rows(min_row=2, min_col=sub_process_col_index+1):
cell = row[0]
# 提取批注和颜色信息
if cell.comment:
comment = cell.comment.text
else:
comment = ''
if cell.fill.start_color.index == 'FFFFFF':
color = 0
elif cell.fill.start_color.index == 'FFFF00':
color = 1
elif cell.fill.start_color.index == 'FF0000':
color = 2
else:
color = ''
# 将批注和颜色信息记录到字典中
data_dict[cell.coordinate] = {'comment': comment, 'color': color}
# 关闭Excel文件
wb.close()
return data_dict
# 遍历所给文件目录下的所有Excel文件
for root, dirs, files in os.walk('/path/to/files'):
for file in files:
if file.endswith('.xlsx'):
filepath = os.path.join(root, file)
# 读取Excel文件并处理
data_dict = read_excel_file(filepath)
# 写入新的“批注”和“颜色”列
wb = load_workbook(filepath)
ws = wb['功能点拆分表']
# 获取“批注”和“颜色”列的列名和列索引
column_names = [cell.value for cell in ws[1]]
comment_col_index = len(column_names) + 1
color_col_index = len(column_names) + 2
# 写入“批注”和“颜色”列的列名
ws.cell(row=1, column=comment_col_index, value='批注')
ws.cell(row=1, column=color_col_index, value='颜色')
# 写入批注和颜色信息
for row in ws.iter_rows(min_row=2, min_col=sub_process_col_index+1):
cell = row[0]
if cell.coordinate in data_dict:
comment = data_dict[cell.coordinate]['comment']
color = data_dict[cell.coordinate]['color']
else:
comment = ''
color = ''
ws.cell(row=row[0].row, column=comment_col_index, value=comment)
ws.cell(row=row[0].row, column=color_col_index, value=color)
# 保存Excel文件
wb.save(filepath)
```
需要注意的是,上述代码仅供参考,具体实现还需要根据实际情况进行调整和优化。
阅读全文