我有一个 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/