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

如何在已有工作簿中使用ExcelWriter新增工作表并设置条件格式

解决方案

方案1:全流程使用openpyxl(无内容丢失风险,推荐)

openpyxl原生支持现有工作簿追加工作表、单元格区域格式设置,无需切换引擎即可满足需求,不会覆盖原有工作簿的内容、格式、公式等元素。
示例代码如下:

from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side

# 加载现有工作簿,关闭只读模式
wb = load_workbook("your_existing_file.xlsx")
# 新增工作表,index参数指定插入位置
new_ws = wb.create_sheet(title="weekly_report_20240520", index=0)

# 写入新工作表数据(按需调整)
new_ws.append(["日期", "销售额", "订单量", "转化率"])
new_ws.append(["2024-05-20", 12000, 120, "12.3%"])

# 定义单元格格式(按需调整样式参数)
header_style = {
    "font": Font(name="微软雅黑", bold=True, size=12, color="FFFFFF"),
    "fill": PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid"),
    "alignment": Alignment(horizontal="center", vertical="center"),
    "border": Border(
        left=Side(style="thin"),
        right=Side(style="thin"),
        top=Side(style="thin"),
        bottom=Side(style="thin")
    )
}

# 给指定区域(示例为A1:D1表头区域)批量应用格式
for cell in new_ws["A1:D1"][0]:
    cell.font = header_style["font"]
    cell.fill = header_style["fill"]
    cell.alignment = header_style["alignment"]
    cell.border = header_style["border"]

# 按需设置列宽
new_ws.column_dimensions["A"].width = 18
new_ws.column_dimensions["B:D"].width = 15

# 保存文件,原有内容不会被覆盖
wb.save("your_existing_file.xlsx")

方案2:必须使用XlsxWriter格式能力的兼容方案

原生XlsxWriter本身不支持追加写入现有工作簿,直接创建文件必然覆盖原有内容,可通过「先读取全量原有内容→统一写入所有内容+新工作表」的方式实现,仅适合原有工作表仅包含纯数据的场景(会丢失原有格式、图表、宏等元素)。
示例代码如下:

import pandas as pd
from openpyxl import load_workbook

# 读取原有工作簿所有工作表数据
old_wb = load_workbook("your_existing_file.xlsx", data_only=False)
existing_sheets = {}
for sheet_name in old_wb.sheetnames:
    ws = old_wb[sheet_name]
    existing_sheets[sheet_name] = pd.DataFrame(ws.values)

# 统一写入原有内容+新工作表
with pd.ExcelWriter("your_existing_file.xlsx", engine="xlsxwriter") as writer:
    # 写入原有所有工作表
    for sheet_name, df in existing_sheets.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False, header=False)
    
    # 写入新增工作表
    new_df = pd.DataFrame({
        "日期": ["2024-05-20", "2024-05-21"],
        "销售额": [12000, 15000]
    })
    new_df.to_excel(writer, sheet_name="weekly_report_20240520", index=False)

    # 调用XlsxWriter API设置格式
    workbook = writer.book
    new_ws = writer.sheets["weekly_report_20240520"]
    header_format = workbook.add_format({
        "bold": True,
        "fg_color": "#4472C4",
        "font_color": "#FFFFFF",
        "border": 1,
        "align": "center"
    })
    # 给指定区域设置格式(示例为第一行表头)
    new_ws.set_row(0, None, header_format)
    # 设置列宽
    new_ws.set_column("A:B", 18)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:15:02