用python,不用load_workbook代码将新建的df按两列分组,两个列名分别为表名和sheeet名,把分组后的df按顺序输出到已有excel中的倒数第二个sheet,表头填充为浅蓝色,全表加边框
时间: 2024-05-05 17:20:26 浏览: 112
好的,让我来给您回答这个问题。
您可以使用 Pandas 库来处理 DataFrame 数据,可以使用 openpyxl 库来操作 Excel 文件。
首先,您需要将 DataFrame 数据按照两个特定的列进行分组。您可以使用 groupby() 函数来实现:
```
grouped_df = df.groupby(['表名', 'sheet名'])
```
接下来,您可以将分组后的结果按照顺序输出到 Excel 文件中。可以使用 openpyxl 库的 load_workbook() 函数打开您想要写入的 Excel 文件,并使用 sheetnames 属性来获取所有 sheet 的名称。然后,您可以使用 insert_rows() 函数将 DataFrame 数据插入到倒数第二个 sheet 中。最后,您可以使用 openpyxl.styles 库中的 Border 和 PatternFill 对象来为表头填充浅蓝色和添加边框。
下面是实现代码的示例:
```python
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side
# 新建 DataFrame 数据
data = {
'表名': ['表1', '表2', '表1', '表2'],
'sheet名': ['sheet1', 'sheet1', 'sheet2', 'sheet2'],
'数据列1': [1, 2, 3, 4],
'数据列2': [5, 6, 7, 8]
}
df = pd.DataFrame(data)
# 按照两个列进行分组
grouped_df = df.groupby(['表名', 'sheet名'])
# 打开要写入的 Excel 文件
workbook = load_workbook('example.xlsx')
# 获取所有 sheet 的名称,并获取倒数第二个 sheet 的名称
sheet_names = workbook.sheetnames
second_last_sheet_name = sheet_names[-2]
# 在倒数第二个 sheet 中插入 DataFrame 数据
worksheet = workbook[second_last_sheet_name]
start_row = worksheet.max_row + 1
for _, group_df in grouped_df:
# 将 DataFrame 数据转换成列表
rows = group_df.values.tolist()
# 插入行
for row in rows:
worksheet.insert_rows(start_row)
start_row += 1
# 填充单元格颜色和边框样式
for cell in worksheet[start_row]:
cell.fill = PatternFill(start_color='ADD8E6', end_color='ADD8E6', fill_type='solid')
cell.border = Border(left=Side(border_style='thin'),
right=Side(border_style='thin'),
top=Side(border_style='thin'),
bottom=Side(border_style='thin'))
# 将数据写入单元格
for col, value in enumerate(row):
worksheet.cell(row=start_row, column=col+1, value=value)
# 保存 Excel 文件
workbook.save('example.xlsx')
```
希望这个示例能够帮助到您。
阅读全文