You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Pandas中拆分Excel工作表并保留源格式?

解决Excel拆分时保留源格式的问题

问题原因

Pandas的read_excel和to_excel仅专注于数据读取与写入,不会识别或保留单元格的格式信息(如字体样式、颜色、对齐方式、单元格宽度等),因此用原代码拆分后会丢失源文件的格式设置。

解决方案

改用openpyxl库直接操作Excel工作簿,它支持完整读取并保留格式信息。以下是修改后的可运行代码:

from openpyxl import load_workbook
import os

# 加载源工作簿与目标工作表
source_wb = load_workbook(r'mypath\\myfile.xlsx')
source_ws = source_wb['Sheet2']

# 目标文件夹路径
target_folder = 'my target folder'
# 自动创建目标文件夹(不存在时)
os.makedirs(target_folder, exist_ok=True)

# 定位STD列的位置(假设表头在第一行)
std_col_idx = None
for col in range(1, source_ws.max_column + 1):
    if source_ws.cell(row=1, column=col).value == 'STD':
        std_col_idx = col
        break

if not std_col_idx:
    raise ValueError("未找到表头'STD',请检查源文件")

# 收集所有STD列的唯一值
std_unique_values = []
for row in range(2, source_ws.max_row + 1):
    cell_val = source_ws.cell(row=row, column=std_col_idx).value
    if cell_val not in std_unique_values:
        std_unique_values.append(cell_val)

# 按STD值拆分并保留格式
for val in std_unique_values:
    # 以源文件为模板创建新工作簿,继承所有格式
    new_wb = load_workbook(r'mypath\\myfile.xlsx')
    new_ws = new_wb['Sheet2']
    
    # 收集需要删除的行(从下往上删,避免索引错乱)
    rows_to_remove = []
    for row in range(2, new_ws.max_row + 1):
        if new_ws.cell(row=row, column=std_col_idx).value != val:
            rows_to_remove.append(row)
    
    # 倒序删除不符合条件的行
    for row in reversed(rows_to_remove):
        new_ws.delete_rows(row)
    
    # 重命名工作表
    new_ws.title = str(val)
    
    # 保存拆分后的文件
    save_path = os.path.join(target_folder, f"{val}.xlsx")
    new_wb.save(save_path)

print(f"文件已创建在 {target_folder} 文件夹")

代码说明

  1. 格式继承:通过load_workbook直接加载源文件作为模板,新工作簿会完整继承源文件的所有格式设置。
  2. 行处理逻辑:倒序删除非目标行,避免删除行后导致后续行索引偏移的问题。
  3. 路径规范:使用os.path.join拼接文件路径,避免手动拼接时出现的路径分隔符错误。

前置准备

运行代码前需确保已安装openpyxl库,执行以下命令安装:

pip install openpyxl

内容的提问来源于stack exchange,提问作者Ramakrishna G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:44:52