用python将新建的df按两列分组,两个列名分别为表名和sheeet名,把分组后的df按顺序输出到已有excel中的倒数第二个sheet,表头填充为浅蓝色,全表加边框,居中,i注意:不用load_workbook代码
时间: 2024-05-04 13:16:10 浏览: 10
可以使用pandas库来进行这个操作,以下是可能的代码示例:
```
import pandas as pd
from openpyxl.styles import Color, Font, Border, Side
from openpyxl.utils import get_column_letter
from openpyxl import Workbook, load_workbook
# 生成一个示例DataFrame
df = pd.DataFrame({'TableName': ['Table1', 'Table2', 'Table1', 'Table3'], 'SheetName': ['Sheet1', 'Sheet2', 'Sheet1', 'Sheet4'], 'Value': [1, 2, 3, 4]})
# 按两列分组,计算每组的值,并按顺序输出到excel中
grouped = df.groupby(['TableName', 'SheetName'])['Value'].sum()
output_df = pd.DataFrame(grouped).reset_index()
output_df.to_excel('example.xlsx', sheet_name='NewSheet', index=False, startrow=1, header=False)
# 打开excel,调整格式
wb = load_workbook('example.xlsx')
ws = wb['NewSheet']
# 填充表头背景色和边框
title_fill = PatternFill(start_color='87CEFA', end_color='87CEFA', fill_type='solid')
title_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
for col_num, column_title in enumerate(output_df.columns, 1):
cell = ws.cell(row=1, column=col_num)
cell.value = column_title
cell.font = Font(bold=True)
cell.fill = title_fill
cell.border = title_border
# 填充数据
for row_num, row_data in output_df.iterrows():
for col_num, cell_value in enumerate(row_data.values, 1):
cell = ws.cell(row=row_num+2, column=col_num)
cell.value = cell_value
cell.border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
# 居中
for col in ws.columns:
column = col[0].column_letter
for cell in col:
ws[column + str(cell.row)].alignment = Alignment(horizontal='center', vertical='center')
# 保存
wb.save('example.xlsx')
```