python - 如何使用 python win32com.client 在 Excel 中添加折线?

标签 python excel win32com polyline safearray

我正在尝试使用 python win32com.client 在 Excel 中添加折线

这是我的代码:

import pythoncom

file = r"D:\\shapes.xlsx"
import win32com.client as client
import win32api

xl = client.gencache.EnsureDispatch("Excel.Application")
xl.Visible = True
wb = xl.Workbooks.Open(file)
ws = wb.Sheets(1)
# xl.ActiveWindow.DisplayGridlines = False
print(ws.Cells(11, 2).Left)
fr = ws.Shapes.AddShape(1, ws.Cells(11, 2).Left, ws.Cells(11, 2).Top, 100, 100)
sr = ws.Shapes.AddShape(1, ws.Cells(11, 7).Left, ws.Cells(11, 7).Top, 100, 100)

points= client.VARIANT(pythoncom.VT_ARRAY, (( ws.Cells(11, 2).Left, ws.Cells(11, 2).Top), ( ws.Cells(11, 2).Left, Left, ws.Cells(11, 7).Top), (ws.Cells(11, 7).Left, ws.Cells(11, 7).Top)))
l=ws.Shapes.AddPolyline(points)

它给出错误MemoryError:CreatingSafeArray

如何用python添加折线?

最佳答案

这需要相当多的尝试和错误。看来您必须为每个点显式创建一个 VARIANT 。虽然您可能希望 win32com.VARIANT() 函数可以转换 Python 数组数组,即 [[],[],...],但它似乎无法管理它,或者在至少不会创建 Excel 期望的参数类型。

the Microsoft documentation 提升坐标示例,并向 @joojaa 的 SO answer 致敬类似的问题:

import win32com.client as wc
from pythoncom import VT_VARIANT

xl = wc.gencache.EnsureDispatch('Excel.Application')

xl.Visible=True
wb = xl.Workbooks.Add()

ws = wb.Worksheets[1]

triangle = [[ 25,100],
            [100,150],
            [150, 50],
            [ 25,100] ]

#Create list of arrays
points = [wc.VARIANT(VT_VARIANT,pt) for pt in triangle]

#points implicitly converted to VARIANT array
ws.Shapes.AddPolyline(points)

Excel 中的结果如下:

enter image description here

关于python - 如何使用 python win32com.client 在 Excel 中添加折线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73853299/

相关文章:

python - 使用 win32gui 处理气球提示的事件

通过 win32com 涉及 Outlook 的 Python 脚本在双击时运行,但不通过任务计划程序运行

python - python中如何获取一串数字并检查是否有重复的数字?

python - 我无法使用 python 删除该字符串中的\xa0 ?

python - Pandas突然无法打开Excel文件(在OLE2复合文档中找不到工作簿

string - 应该是VBA中的简单循环程序

python - 在pandas中读取多标题Excel表

python - 打印带有后缀文本的左对齐格式化 float

python - Python 中的条件 for

python - 使用 python 动态读取和/或覆盖 Excel 文件,而不会出现覆盖警报