用最新版本的库用python把df按照两列分组,分组的两个列名分别为表名和sheet名,分别输出到一个文件夹中的和分组df表名相同的EXCEL中,现有excel的SHEET要在最后,要求表头填充成浅蓝色,全部表格加边框、居中、自动适应列宽
时间: 2024-05-05 08:19:52 浏览: 90
好的,这是一个比较复杂的任务,需要用到 pandas 和 openpyxl 库。首先需要安装这两个库,可以在终端或者命令提示符中使用以下命令安装:
```
pip install pandas openpyxl
```
然后,我们可以按照以下步骤来实现你的要求:
1. 导入必要的库:
```python
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment
```
2. 加载数据:
假设你已经有了一个名为 df 的 pandas DataFrame,可以使用以下命令来加载数据:
```python
df = pd.read_excel('your_file.xlsx')
```
3. 分组数据:
根据你的要求,需要将 df 按照两列分组,分别为表名和 sheet 名。可以使用以下命令来分组:
```python
groups = df.groupby(['表名', 'sheet名'])
```
4. 将分组后的数据写入 Excel 文件:
```python
for name, group in groups:
# 创建一个新的 Excel 文件
wb = Workbook()
# 获取当前的 sheet
ws = wb.active
# 将 DataFrame 写入 sheet 中
for r in dataframe_to_rows(group, index=False, header=True):
ws.append(r)
# 设置表头样式为浅蓝色
header_fill = PatternFill(start_color='99CCFF', end_color='99CCFF', fill_type='solid')
for cell in ws[1]:
cell.fill = header_fill
# 设置边框、居中、自动适应列宽
thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
for row in ws:
for cell in row:
cell.border = thin_border
cell.alignment = Alignment(horizontal='center', vertical='center')
ws.column_dimensions[cell.column_letter].auto_size = True
# 将 Excel 文件保存到指定路径
wb.save(f'{name[0]}_{name[1]}.xlsx')
```
这个程序会将分组后的每个 DataFrame 写入一个 Excel 文件中,文件名为表名和 sheet 名的组合,例如,如果有一个表名为 "table1",sheet 名为 "sheet1" 的组合,那么生成的文件名就是 "table1_sheet1.xlsx"。每个文件中只包含一个 sheet,数据为分组后的 DataFrame。表头会被填充成浅蓝色,所有单元格都会添加边框、居中,并自动适应列宽。
阅读全文