在Word中将形状/内联形状设置为装饰

问题描述 投票:0回答:1

在 Office 365 中,微软为 Shapes / InlineShapes(图片)引入了一个新属性:

Decorative

我可以使用

VBA
来操作它,如此处所示,但不能使用 VSTO
 操作它,这是我真正需要的。

值类型为

Microsoft.Office.Core.MsoTriState

,如果设置为 msoTrue,则会启用图片上的功能。

我已经能够使用

VBA

 轻松切换此功能,如此处所示(要尝试它,只需在 
Microsoft Word 365
 的空文档中插入内联图像)

Sub ToggleDecorativePic() Dim pic As InlineShape Set pic = ActiveDocument.InlineShapes(1) pic.Decorative = Not pic.Decorative End Sub
这将切换活动文档中第一个 InLineShape 的 Decorative 属性。

Before code executed

After code executed

*但这就是实际的问题:

我需要从

VSTO

C#
VB.NET
)执行此操作,但属性
.Decorative
在Intellisense中不可用,即使我尝试通过将
InlineShape
对象强制转换为
Dynamic
来强制执行此操作,它只是在执行代码时崩溃。

我正在使用此 Office Interop nuGet 捆绑包与 Word 进行交互:

Bundle.Microsoft.Office.Interop

 版本 
15.0.4569
 日期为 
October 23rd 2018
,因此它应该是最新的。该捆绑包包含 Microsoft Excel、Outlook、PowerPoint 和 Word 的互操作资源。

我也尝试过使用

Microsoft.Office.Interop.Word

,但它已经有两年了,所以它显然也不包含这个新功能。

根据有关无障碍文档的新欧盟法律,这是使用 Microsoft Word 生成 PDF 文档时的一个关键功能。

或者:是否可以以某种方式从

VSTO

 以 VBA 形式动态执行此操作,而无需在文档等中创建宏?我猜不会,至少在不启用对对象模型的信任的情况下不会,这不是一个可行的选择:-/

c# ms-word office365 vsto accessibility
1个回答
3
投票
确实是一个有趣的问题。起初,我认为也许可以通过将

Microsoft.Office.Interop.Word

 的引用设置为 GAC 中的 PIA 而不是 Visual Studio 安装的 PIA(这是 VSTO 项目的默认源)并设置“嵌入互操作类型”来解决这个问题为假。然而,两者都没有效果。

只剩下使用

PInvoke

 的选项,这对我有用:

Word.InlineShape ils = doc.InlineShapes[1]; object oIls = ils; object isDec = oIls.GetType().InvokeMember("Decorative", System.Reflection.BindingFlags.GetProperty, null, oIls, null); System.Diagnostics.Debug.Print("Is the InlineShape marked as decorative: " + isDec.ToString()); if ((int)isDec != -1) { object[] arg = new object[] { -1 }; oIls.GetType().InvokeMember("Decorative", System.Reflection.BindingFlags.SetProperty, null, oIls, arg); }
    
© www.soinside.com 2019 - 2024. All rights reserved.