我有一个Excel电子表格,其中包含一系列已知图片。我需要在这些图片上添加阴影(称为SoftEdge的属性)。尽管执行此操作的VBA代码很容易(通过宏录制捕获),但我无法获得等效的Delphi。我遍历每张图片,获取图片的句柄,然后设置SoftEdge类型。我知道我的句柄是有效的,因为我可以“ MyExcelPic.Delete”并且可以工作。我尝试将MyExcelPic定义为OleVariant和Shape。定义为Shape时,我得到了一个AV,定义为OleVariant时,我得到了“自动化对象不支持的type _”。
这是相关的代码段...
var
MyExcelPic: Shape;
begin
...
for i := 1 to TotalPicCount do
begin
// VBA Code...
//ActiveSheet.Shapes.Range(Array("Picture 13")).Select
//Selection.ShapeRange.SoftEdge.Type = msoSoftEdgeType1
MyExcelPic := ExcelCloudSheet.Shapes.Item('Picture ' + IntToStr(i));
//MyExcelPic.Delete;
MyExcelPic.SoftEdge.type_ := msoSoftEdgeType1;
end;
我唯一看到的是Excel宏定义了“类型”,而Delphi定义了“ type_”。在理想的世界中,我希望在图纸上具有各种形状的范围,并一次性设置SoftEdge属性,但是在这一点上,任何设置此属性的方法都很棒...
答案 0 :(得分:2)
我使用Variant而不是OLEVariant。您不能使用Shape,也不需要下划线。您指出您已转为影子,但我认为这与问题无关。
使用您的代码,相当于以下内容
var
MyExcelPic: Variant;
begin
...
for i := 1 to TotalPicCount do
begin
// VBA Code...
//ActiveSheet.Shapes.Range(Array("Picture 13")).Select
//Selection.ShapeRange.SoftEdge.Type = msoSoftEdgeType1
MyExcelPic := ExcelCloudSheet.Shapes.Item('Picture ' + IntToStr(i));
//MyExcelPic.Delete;
MyExcelPic.SoftEdge.type := msoSoftEdgeType1;
end;