excel - Delphi - Excel - 向形状添加阴影

标签 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 宏定义了“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;

关于excel - Delphi - Excel - 向形状添加阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53558473/

相关文章:

delphi - 找出哪个进程注册了全局热键? (Windows API)

delphi - TListView : Subitem order after adding a new column between existing during runtime

excel - 在 VBA 中查找并替换特定范围

excel - 添加一个数字到日期,其中数字在一个单元格中,日期在另一个单元格中 - VBA

arrays - VBA 中的数组下标 - 谁能解释一下?

python - 使用 XLWINGS 打开工作簿而不使其可见

delphi - 如何将 TObject 转换为 TObjectList<T>?

python - 在 Python 中匹配

multithreading - 同时在多个线程上运行的 TIdHttp 的访问冲突

delphi - 如何修复 TComboBox Ctl3D 属性错误?