我有一个包含一系列已知图片的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;

10-08 04:09