吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 958|回复: 30
收起左侧

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

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

[Asm] 纯文本查看 复制代码
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[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
[mw_shl_code=asm,true]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
[mw_shl_code=asm,true]import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils ...

把这段注释掉,可以正常按角色切分了,但是吧,会有冗余的数据,打个比方,我有100条数据,按角色分sheet页后,每个sheet页显示还是100条,某个角色为老师的sheet页内容20条,切割后这20条是对的,但是后80条是copy填充的数据
# 将新的数据写回原始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那段和写入原始数据重复了?我这是猜测,具体不懂。
头像被屏蔽
捷豹网络丶贱仔 发表于 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
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 14:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表