Как изменить атрибут для преобразования формы линии Excel в VBA скрипт в win32com - PullRequest
0 голосов
/ 31 октября 2019

Я хотел бы преобразовать скрипт VBA в код win32com, чтобы выбрать и изменить свойство формы линии на листе Excel. Я могу выбрать строку (вижу строку, выбранную на листе Excel), но не могу изменить свойство.

Может ли кто-нибудь мне помочь?

Код VBA

Sheets("Maps").Select
Sheets("Maps").Shapes.Range(Array(item_in_review_2)).Select

With Selection.ShapeRange.Line
    .Weight = 3
    If .ForeColor.RGB = RGB(0, 0, 0) Then
        .ForeColor.RGB = RGB(0, 255, 0)
    Else
        .ForeColor.RGB = RGB(255, 0, 0)
    End If
End With

Это мой код на python

import win32com.client as win32
import os

def rgbToInt(rgb):
    colorInt = rgb[0] + (rgb[1] * 256) + (rgb[2] * 256 * 256)
    return colorInt

xlApp = win32.gencache.EnsureDispatch('Excel.Application')
xlApp.Visible = True

wb = xlApp.Workbooks.Open('C:\\Users\\xxx\\PycharmProjects\\prova\\Book1.xlsx')
sht = wb.Worksheets('Maps')

OTS_review = 'test'

changeline = sht.Shapes(OTS_review).Select()

changeline.Width = 3

if changeline.ForeColor.RGB == rgbToInt((255,0,0)):
    changeline.ForeColor.RGB = rgbToInt((0, 255, 0))
else:
    changeline.ForeColor.RGB = rgbToInt((255, 0, 0))

Это сообщение об ошибке

Traceback (последний вызов был последним):

File "C: /Users/xxxx/PycharmProjects/prova/xxx.py ", строка 18, в changeline.Width = 3

AttributeError: объект 'NoneType' не имеет атрибута 'Width'

1 Ответ

0 голосов
/ 31 октября 2019

Попробуйте, возможно, изменить на это:

changeline = sht.Shapes(OTS_review)  # or maybe with .Select()
changeline.ShapeRange.Line.Width = 3
changeline.ShapeRange.Line.ForeColor.RGB = rgbToInt((0, 255, 0))

'или

changeline = sht.Shapes(OTS_review)
changeline.Line.Width = 3
changeline.Line.ForeColor.RGB = rgbToInt((0, 255, 0))

Я разрешаю, изменив ширину и вес

changeline = sht.Shapes(OTS_review)
changeline.Line.Weight = 3
changeline.Line.ForeColor.RGB = rgbToInt((0, 255, 0))
...