用python将新建的df按两列分组,两个列名分别为表名和sheeet名,把分组后的df按顺序输出到已有excel中的倒数第二个sheet,表头填充为浅蓝色,全表加边框,居中
时间: 2024-05-09 12:21:53 浏览: 116
好的,您可以使用pandas库和openpyxl库来完成这个任务。
以下是可能的代码实现:
```python
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment
# 生成样式
blue_fill = PatternFill(start_color='7EB6FF', end_color='7EB6FF', fill_type='solid')
thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
center_alignment = Alignment(horizontal='center', vertical='center')
# 加载excel文件,并获取要写入的sheet名
book = load_workbook('your_file.xlsx')
sheets = book.sheetnames
target_sheet = sheets[-2] # 输出到倒数第二个sheet
# 读取数据并按两列进行分组
df = pd.read_csv('your_data.csv')
grouped = df.groupby(['表名', 'sheet名'])
# 将每组的数据写入excel
sheet = book[target_sheet]
row_idx = 1 # 从第一行开始写
for name, group in grouped:
# 写入表名、sheet名和分隔行
sheet.cell(row=row_idx, column=1, value=name[0]).fill = blue_fill
sheet.cell(row=row_idx, column=2, value=name[1]).fill = blue_fill
sheet.merge_cells(start_row=row_idx, start_column=1, end_row=row_idx, end_column=2) # 合并两列
sheet.cell(row=row_idx+1, column=1, value='').border = thin_border # 分隔行
sheet.cell(row=row_idx+1, column=2, value='').border = thin_border
row_idx += 2 # 下一行开始写数据
# 写入数据
for _, row in group.iterrows():
for col_idx, value in enumerate(row):
sheet.cell(row=row_idx, column=col_idx+1, value=value).border = thin_border
sheet.cell(row=row_idx, column=col_idx+1).alignment = center_alignment
row_idx += 1 # 下一行
# 应用样式到整表
for row in sheet.rows:
for cell in row:
cell.border = thin_border
cell.alignment = center_alignment
# 保存文件
book.save('your_file.xlsx')
```
您可以将上面的代码复制到Python文件中,然后将文件名和数据文件名替换为您自己的文件,以及两个列的名称。运行脚本后,数据将被分组并写入您的Excel文件中的特定sheet。
阅读全文