用最新版本的库用python把df按照两列分组,分组后的两列分别为表名和sheet名,把分组后的df按照分组后的sheet名输出到现有表名等于分组后的表名的EXCEL中,现有excel的SHEET要在最后,要求表头填充成浅蓝色,加边框,居中,自动适应列宽
时间: 2024-05-13 16:13:56 浏览: 136
好的,这是一个关于Python处理Excel和数据分组的问题,我会尽力回答。首先,我们需要使用`pandas`库来对数据进行分组,并使用`openpyxl`库来处理Excel文件。以下是代码实现:
```python
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment
# 读取Excel文件
filename = 'example.xlsx'
df = pd.read_excel(filename)
# 按照两列分组
groups = df.groupby(['表名', 'sheet名'])
# 遍历每个分组
for name, group in groups:
table_name = name[0]
sheet_name = name[1]
# 读取现有的Excel文件
book = load_workbook(filename)
# 判断是否存在表名等于分组后的表名的sheet,如果不存在则创建新的sheet
if sheet_name in book.sheetnames:
sheet = book[sheet_name]
else:
sheet = book.create_sheet(sheet_name)
# 将分组后的数据写入到Excel中
sheet.append(group.columns.tolist())
for row in group.values:
sheet.append(row.tolist())
# 设置表头填充成浅蓝色,加边框,居中,自动适应列宽
fill = PatternFill("solid", fgColor="BDD7EE")
border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
align = Alignment(horizontal='center', vertical='center')
for cell in sheet[1]:
cell.fill = fill
cell.border = border
cell.alignment = align
sheet.column_dimensions.group('A', 'Z', hidden=False, outline_level=1, width=None)
# 保存Excel文件
book.save(filename)
```
以上代码中,我们首先使用`pandas`库将Excel文件读取为一个DataFrame对象,然后使用`groupby()`方法按照两列进行分组。接下来,我们遍历每个分组,使用`openpyxl`库读取Excel文件,并判断是否存在表名等于分组后的表名的sheet,如果不存在则创建新的sheet。然后,我们将分组后的数据写入到Excel中,并设置表头填充成浅蓝色,加边框,居中,自动适应列宽。最后,我们保存Excel文件。
阅读全文