Delphi-Excel-为形状添加阴影

时间:2018-11-30 13:26:03

标签: excel delphi

我有一个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属性,但是在这一点上,任何设置此属性的方法都很棒...

1 个答案:

答案 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;