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

Python XlsxWriter中ChartSheet添加水印失效问题求助

解决XlsxWriter中ChartSheet无法显示水印的问题

你遇到的情况是:XlsxWriter的Chartsheet对象不支持通过页眉添加图片水印——虽然两类工作表都能正常显示页眉文本,但只有普通Worksheet支持页眉中的图片资源。这是因为Excel对图表工作表的页眉页脚图片有特殊限制,XlsxWriter目前也未实现该功能的支持。

下面提供两种可行的解决方案:

方案1:将图表嵌入普通Worksheet(推荐)

放弃独立的Chartsheet,把图表插入到普通Worksheet中,这样就能复用Worksheet的页眉水印功能,和你原来的设置逻辑保持一致。

修改后的代码示例:

import xlsxwriter

workbook = xlsxwriter.Workbook("worksheet_with_chart.xlsx")

# 使用普通Worksheet,同时容纳数据和图表
worksheet = workbook.add_worksheet()

# 设置页眉水印,和之前的逻辑一致
worksheet.set_header('&C&G&LTEXTISVISIBLE', {'image_center': 'watermark_draft.png'})

# 数据部分和原代码一致
bold = workbook.add_format({"bold": 1})
headings = ["Number", "Batch 1", "Batch 2"]
data = [
    [2, 3, 4, 5, 6, 7],
    [10, 40, 50, 20, 10, 50],
    [30, 60, 70, 50, 40, 30],
]

worksheet.write_row("A1", headings, bold)
worksheet.write_column("A2", data[0])
worksheet.write_column("B2", data[1])
worksheet.write_column("C2", data[2])

# 创建图表
chart1 = workbook.add_chart({"type": "bar"})
chart1.add_series(
    {
        "name": "=Sheet1!$B$1",
        "categories": "=Sheet1!$A$2:$A$7",
        "values": "=Sheet1!$B$2:$B$7",
    }
)
chart1.add_series(
    {
        "name": ["Sheet1", 0, 2],
        "categories": ["Sheet1", 1, 0, 6, 0],
        "values": ["Sheet1", 1, 2, 6, 2],
    }
)
chart1.set_title({"name": "Results of sample analysis"})
chart1.set_x_axis({"name": "Test number"})
chart1.set_y_axis({"name": "Sample length (mm)"})
chart1.set_style(11)

# 将图表插入到Worksheet的指定位置(比如E2单元格)
worksheet.insert_chart("E2", chart1)

workbook.close()

方案2:直接在图表上添加水印图片

如果必须使用独立的Chartsheet,可以通过chart.insert_image()方法将水印图片直接添加到图表背景,调整位置和透明度来模拟水印效果。

修改后的代码示例:

import xlsxwriter

workbook = xlsxwriter.Workbook("chartsheet_with_watermark.xlsx")

worksheet = workbook.add_worksheet()

# 数据部分和原代码一致
bold = workbook.add_format({"bold": 1})
headings = ["Number", "Batch 1", "Batch 2"]
data = [
    [2, 3, 4, 5, 6, 7],
    [10, 40, 50, 20, 10, 50],
    [30, 60, 70, 50, 40, 30],
]

worksheet.write_row("A1", headings, bold)
worksheet.write_column("A2", data[0])
worksheet.write_column("B2", data[1])
worksheet.write_column("C2", data[2])

# 创建图表
chart1 = workbook.add_chart({"type": "bar"})
chart1.add_series(
    {
        "name": "=Sheet1!$B$1",
        "categories": "=Sheet1!$A$2:$A$7",
        "values": "=Sheet1!$B$2:$B$7",
    }
)
chart1.add_series(
    {
        "name": ["Sheet1", 0, 2],
        "categories": ["Sheet1", 1, 0, 6, 0],
        "values": ["Sheet1", 1, 2, 6, 2],
    }
)
chart1.set_title({"name": "Results of sample analysis"})
chart1.set_x_axis({"name": "Test number"})
chart1.set_y_axis({"name": "Sample length (mm)"})
chart1.set_style(11)

# 插入水印图片到图表,调整位置和透明度
# 使用offset设置图片在图表中的相对位置,x_scale/y_scale调整大小,transparency设置透明度
chart1.insert_image(
    {'x_offset': 100, 'y_offset': 50},  # 水印位置,可根据图表大小调整
    'watermark_draft.png',
    {'x_scale': 0.5, 'y_scale': 0.5, 'transparency': 50}  # 缩放比例和透明度
)

# 添加Chartsheet并关联图表
chartsheet = workbook.add_chartsheet()
chartsheet.set_chart(chart1)
chartsheet.activate()

workbook.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:54:57