【问题标题】:How to Add polyline in Excel with python win32com.client?如何使用 python win32com.client 在 Excel 中添加折线?
【发布时间】:2022-10-02 19:20:19
【问题描述】:

我正在尝试使用 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添加折线?

  • ws.Cells(11, 2).Left, Left, ... 那个 Left 看不下去了。

标签: python excel win32com polyline safearray


【解决方案1】:

这需要相当多的反复试验。看来您必须为每个点显式创建一个 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 中使用此结果:

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多