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<EXTISVISIBLE', {'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
相关产品推荐
相关产品推荐

