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

如何用Python添加修改Excel形状?寻求openpyxl不支持形状的替代方案

用Python操作Excel形状的可行方案

一、使用win32com.client(Windows专属,依赖本地Excel)

这个库直接调用本地安装的Excel程序,完全支持形状的添加、修改,且保存后不会丢失原有形状,是最可靠的方案。

1. 安装

pip install pywin32

2. 示例代码

(1)修改已有Excel中的形状

import win32com.client as win32

# 启动Excel程序
excel = win32.gencache.EnsureDispatch('Excel.Application')
# 打开目标文件
wb = excel.Workbooks.Open(r'C:\path\to\your\file.xlsx')
ws = wb.Worksheets('Sheet1')

# 修改已有形状:找到名为"Rectangle 1"的形状,修改填充颜色和文本
shape = ws.Shapes('Rectangle 1')
shape.Fill.ForeColor.RGB = 0xFF0000  # 设置为红色
shape.TextFrame2.TextRange.Text = '修改后的文本'

# 保存并关闭
wb.Save()
wb.Close()
excel.Quit()

(2)添加新形状

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(r'C:\path\to\your\file.xlsx')
ws = wb.Worksheets('Sheet1')

# 添加矩形形状,参数:形状类型、左偏移、上偏移、宽度、高度(单位:磅)
new_shape = ws.Shapes.AddShape(1, 100, 100, 200, 100)  # 1代表矩形
new_shape.Name = 'MyRectangle'
new_shape.Fill.ForeColor.RGB = 0x00FF00  # 绿色填充
new_shape.TextFrame2.TextRange.Text = '新添加的形状'

wb.Save()
wb.Close()
excel.Quit()

二、使用xlwings(跨平台,依赖Excel/LibreOffice)

xlwings封装了Windows下的win32com和Mac下的appscript,API更简洁,跨平台支持更好,同样能完整保留形状。

1. 安装

pip install xlwings

2. 示例代码

(1)修改已有形状

import xlwings as xw

with xw.App(visible=False) as app:
    wb = xw.Book(r'C:\path\to\your\file.xlsx')
    ws = wb.sheets['Sheet1']
    
    # 获取形状并修改属性
    shape = ws.shapes['Rectangle 1']
    shape.api.Fill.ForeColor.RGB = 0x0000FF  # 蓝色填充
    shape.api.TextFrame2.TextRange.Text = 'xlwings修改的文本'
    
    wb.save()
    wb.close()

(2)添加新形状

import xlwings as xw

with xw.App(visible=False) as app:
    wb = xw.Book(r'C:\path\to\your\file.xlsx')
    ws = wb.sheets['Sheet1']
    
    # 添加矩形,参数:形状类型、左偏移、上偏移、宽度、高度
    new_shape = ws.shapes.add_shape(1, 100, 100, 200, 100)
    new_shape.name = 'XlwingsShape'
    new_shape.api.Fill.ForeColor.RGB = 0xFFCC00  # 橙色填充
    new_shape.api.TextFrame2.TextRange.Text = 'xlwings新增形状'
    
    wb.save()
    wb.close()

三、为什么openpyxl会丢失形状?

openpyxl仅支持读取和写入Excel的核心数据(单元格内容、基础样式等),对形状、图表这类非核心对象的支持非常有限,保存时会直接忽略这些元素,所以处理后原有形状会丢失。如果必须用openpyxl处理单元格数据,同时要保留形状,可先复制原文件,用openpyxl处理复制文件的单元格内容,再用上述两个库处理形状——但这种方法繁琐,优先推荐直接使用win32com或xlwings。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:10:40