我有一个包含一系列已知图片的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宏定义了“ type”,而Delphi定义了“ type_”。在理想的世界中,我希望在图纸上具有各种形状的范围,并一次性设置SoftEdge属性,但是在这一点上,任何设置此属性的方法都很棒。
最佳答案
我使用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;