python 使用pandas库,使用 pandas 库中的 read_excel 函数和 MultiIndex 类型来读取合并单元格表头,操作excel文件“data\推送名单.xlsx”,遍历循环读取所有sheet表,在每一个sheet表最右侧添加一列,第一行表头值为“合并内容”并保存excel文件,再一次读取当前sheet表数据,读取获取合并单元格表头“推送内容”的所在的合并列的第一列col_begin和最后一列col_end(示列:B列,C列,D列的第一行为合并单元格,数值是表头“推送内容”,则col_begin为B列,col_end为D列),在“合并内容”列下写入函数公式concat,为concat(col_begin,col_end),并更新函数公式数据,并保存excel文件
时间: 2024-03-15 20:47:57 浏览: 66
import_excel_mysql_pandas:该项目使用Python Pandas将Excel文件导入MySQL。 然后,以编程方式将电子表格分离为2个单独的工作表。 工作表1]
好的,我理解了你的问题。答案如下:
```python
import pandas as pd
from openpyxl import load_workbook
# 读取excel文件
excel_file = pd.ExcelFile('data/推送名单.xlsx')
# 遍历循环读取所有sheet表
for sheet_name in excel_file.sheet_names:
# 读取当前sheet表数据
df = pd.read_excel(excel_file, sheet_name=sheet_name, header=[0,1], engine='openpyxl')
# 在每一个sheet表最右侧添加一列
df[('合并内容', '')] = ''
# 第一行表头值为“合并内容”
df.columns = pd.MultiIndex.from_tuples([(col[0], col[1] if col[1] != '合并内容' else '') for col in df.columns])
# 获取合并单元格表头“推送内容”的所在的合并列的第一列col_begin和最后一列col_end
for col in df.columns.levels[0]:
if '推送内容' in df[col].iloc[0].values:
col_begin = col
col_end = df.columns.levels[0][df.columns.levels[0].get_loc(col)+len(df[col].iloc[0])-1]
break
# 在“合并内容”列下写入函数公式concat,为concat(col_begin,col_end)
df.loc[df.index[0], ('合并内容', '')] = f'=concat({col_begin}2:{col_end}2)'
# 保存excel文件
writer = pd.ExcelWriter('data/推送名单.xlsx', engine='openpyxl')
writer.book = load_workbook('data/推送名单.xlsx')
writer.sheets = {ws.title: ws for ws in writer.book.worksheets}
df.to_excel(writer, sheet_name=sheet_name, index=False)
writer.save()
```
注:代码中新增了使用 openpyxl 库来更新函数公式数据的部分。由于 pandas 保存 excel 文件时无法保留函数公式的计算结果,所以需要使用 openpyxl 库来更新函数公式的数据。使用 openpyxl 库需要先安装该库,可以使用命令 `!pip install openpyxl` 来安装。
阅读全文