我正在尝试使用 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 中的结果如下:
关于python - 如何使用 python win32com.client 在 Excel 中添加折线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73853299/