excel - Delphi - Excel - 为形状添加阴影
问题描述
我有一个 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;
推荐阅读
- c++ - 在linux中运行cpp程序时如何获取关键事件?
- graphql - Apollo Client TypeError: Object is not function
- c# - 在 c# 中使用 rsa 私钥对字符串进行签名并使用 openSSL 进行验证
- python - Python - 来自 pyodbc 的字典返回类型错误的结果
- php - php 错误提示“file_put_contents () 无法打开流”
- mysql - 获取每个子角色的“用户”
- log4j - 为什么 log4j2 在使用 %replace 时会打印双堆栈跟踪?
- terminal - 集成终端图标问题
- mysql - 根据条件查找行位置
- r - 使用 ggplot 修复饼图的正确布局