使用XlsxWriter为Excel设置背景图片报AttributeError错误如何解决?
报错原因
XlsxWriter 的 Worksheet 对象不存在set_background方法,你调用了不存在的API才触发属性错误,设置工作表背景的正确官方API为set_bg_image()。
解决方案
首先先升级XlsxWriter到3.0.6及以上版本,该版本开始支持直接传入字节流作为背景图,无需保存本地临时文件:
pip install --upgrade xlsxwriter
代码修改示例
import io import urllib.request import werkzeug from xlsxwriter import Workbook wb = Workbook(stream, {'in_memory': True}) sheet_cover = wb.add_worksheet("Cover") image_url = werkzeug.urls.url_join(base_url, '/test_module/static/src/img/cover-image.png') image_data = io.BytesIO(urllib.request.urlopen(image_url).read()) # 替换原有set_background调用,使用正确的API sheet_cover.set_bg_image( # 第一个参数填占位文件名,只要后缀和实际图片格式一致即可 'cover.png', options={ 'image_data': image_data } )
补充:实现单张背景铺满打印页面
如果你需要实现示例图中整张图片作为封面背景、不平铺的效果,推荐使用插入页眉图片的方案,适配打印场景效果更可控:
# 先设置页边距,让页眉占满整个页面 sheet_cover.set_margins(top=0, bottom=0, left=0, right=0) sheet_cover.set_header('&[Picture]', {'image_left': 'cover.png', 'image_data_left': image_data}) # 隐藏网格线更美观 sheet_cover.hide_gridlines(2)
内容的提问来源于stack exchange,提问作者Abdullah Al Mamun
相关产品推荐
相关产品推荐

