feimao 发表于 2024-6-5 17:27

求助大佬,python对excel指定内容进行切割并保留原格式

不好意思,我又来了{:1_907:}技术菜,没办法
昨天感谢大佬们给我指点解决了匹配保留原格式问题。现在的问题是我需要对这个excel当中的指定列的内容“角色”切分成sheet页。同样的,我可以实现切分功能,但是,又是把原来的样式和链接给丢了。。。
求助大佬们出手解决。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows

# 读取Excel文件
df_a = pd.read_excel(r"C:\1.xlsx")
df_b = pd.read_excel(r"C:\2.xlsx")

# 设置索引并进行映射
df_b.set_index('姓名', inplace=True)
df_a['角色'] = df_a['姓名'].map(df_b['角色'])

# 加载原始Excel文件
wb = load_workbook(r"C:\1.xlsx")
ws = wb.active

# 获取角色列的索引
role_col_index = df_a.columns.get_loc('角色') + 1# openpyxl的列索引从1开始

# 将新的数据写回原始Excel文件
for index, row in df_a.iterrows():
    ws.cell(row=index+2, column=role_col_index, value=row['角色'])# 数据从第2行开始

# 保存Excel文件wb.save(r"C:\1_with_styles.xlsx")

df_d = pd.read_excel(r"C:\1_with_styles.xlsx")
writer = pd.ExcelWriter(r"C:\1_with_styles.xlsx", engine = 'openpyxl')
df_a.to_excel(writer, sheet_name='Sheet1', index=False)
#按角色分sheet页展示
for j in df_d['角色'].unique():
    df_d == j].to_excel(writer, sheet_name=str(j), index=False)
writer.save()

捷豹网络丶贱仔 发表于 2024-6-5 18:23

feimao 发表于 2024-6-5 21:36

捷豹网络丶贱仔 发表于 2024-6-5 18:23
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.d ...

大佬,有点问题,一个是样式和链接没有复制过来,二个是按角色切割后的sheet页名称是对的,但几个sheet内容一模一样,而且生成的excel文件打开会报“发现xxx.xlsx中的部分内容有问题,是否让我们尽量尝试恢复?如果您......”。我把代码改成下面这样链接和样式都是一样了,但另外两个问题无解,求指教。
    # 复制单元格样式
    for row in source_ws.iter_rows():
      for cell in row:
            new_cell = target_ws.cell(row=cell.row, column=cell.col_idx, value=cell.value)
            if cell.has_style:
                new_cell._style = copy(cell._style)
                new_cell.font = copy(cell.font)
                new_cell.border = copy(cell.border)
                new_cell.fill = copy(cell.fill)
                new_cell.number_format = copy(cell.number_format)
                new_cell.protection = copy(cell.protection)
                new_cell.alignment = copy(cell.alignment)
                new_cell.hyperlink = copy(cell.hyperlink)

捷豹网络丶贱仔 发表于 2024-6-5 22:04

feimao 发表于 2024-6-6 09:31

捷豹网络丶贱仔 发表于 2024-6-5 22:04
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils ...

把这段注释掉,可以正常按角色切分了,但是吧,会有冗余的数据,打个比方,我有100条数据,按角色分sheet页后,每个sheet页显示还是100条,某个角色为老师的sheet页内容20条,切割后这20条是对的,但是后80条是copy填充的数据:lol
# 将新的数据写回原始Excel文件 (可以删除此段,因为后续会重新写入)
# for index, row in df_a.iterrows():
#   ws.cell(row=index+2, column=role_col_index, value=row['角色'])

feimao 发表于 2024-6-6 09:40

feimao 发表于 2024-6-6 09:31
把这段注释掉,可以正常按角色切分了,但是吧,会有冗余的数据,打个比方,我有100条数据,按角色分sheet ...

会不会是copy那段和写入原始数据重复了?我这是猜测,具体不懂。{:301_980:}

捷豹网络丶贱仔 发表于 2024-6-6 12:50

捷豹网络丶贱仔 发表于 2024-6-6 12:51

feimao 发表于 2024-6-6 13:57

捷豹网络丶贱仔 发表于 2024-6-6 12:51
是的,所以帮你修改了一下,你可以再去试试,如果还是有什么问题继续提出来

谢谢大佬。还是有问题,切割后的结果每个角色sheet页内容和第一个原始sheet是一样的。
然后去掉这段代码,每个切割后的sheet页都是切割正确的内容,但是样式吧又没了。
    # 复制格式
    copy_sheet_formatting(ws, target_ws)

捷豹网络丶贱仔 发表于 2024-6-6 14:06

页: [1] 2 3 4
查看完整版本: 求助大佬,python对excel指定内容进行切割并保留原格式