Delphi-Excel-向形状添加阴影

Delphi-Excel-向形状添加阴影,excel,delphi,Excel,Delphi,我有一个Excel电子表格,其中有一系列已知的图片。我需要在这些图片中添加阴影(称为SoftEdge的属性)。虽然VBA代码很容易做到这一点(通过宏录制捕获),但我无法使Delphi等效程序正常工作。我循环浏览每张图片,获取图片的句柄,然后设置SoftEdge类型。我知道我的句柄是有效的,因为我可以“MyExcelPic.Delete”这样就行了。我试着将MyExcelPic定义为OleVariant和Shape。当定义为Shape时,我得到一个AV,当定义为OleVariant时,我得到“类型

我有一个Excel电子表格,其中有一系列已知的图片。我需要在这些图片中添加阴影(称为SoftEdge的属性)。虽然VBA代码很容易做到这一点(通过宏录制捕获),但我无法使Delphi等效程序正常工作。我循环浏览每张图片,获取图片的句柄,然后设置SoftEdge类型。我知道我的句柄是有效的,因为我可以“MyExcelPic.Delete”这样就行了。我试着将MyExcelPic定义为OleVariant和Shape。当定义为Shape时,我得到一个AV,当定义为OleVariant时,我得到“类型\不受自动化对象支持”

下面是相关的代码片段

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定义了“类型”。在一个完美的世界中,我希望在工作表上有一系列的形状,并在一次过程中设置SoftEdge属性,但在这一点上,任何设置此属性的方法都是很好的

我使用Variant而不是OLEVariant。不能使用形状,也不需要下划线。你指出你换成了影子,但我认为这与问题无关

使用您的代码,这将等同于以下内容

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;

我倾向于使用Variant而不是OLEVariant,但我想两者都可以。不能使用形状,也不需要下划线;如果你添加了一个变量,那么我应该可以用它来发布一个答案。使用变量似乎有效。我也从SoftEdge切换到Shadow。现在工作。。。作为答案提交,我将接受。“我看到的唯一奇怪之处是…”:原因是Delphi更改Excel对象的成员名称,以避免与Delphi保留字等发生冲突,例如通过添加下划线来键入。这只是为了使类型库导入单元是可编译的,并且不会对已编译的代码造成差异。