我试图通过一个文件中的所有形状循环,并检查其“替代文本”,其中已为该图像记录为它的替代文本的源文件名。我需要读取特定的源图像并将其转换为不同的图像格式。
我能够到达阅读形状的AlternateText的点,但它抛出一个异常:“((Microsoft.Office.Interop.Word.Shape)).AlternativeText”引发了类型为“System. System.InteropServices.COMException”的异常
当我设置一个断点并查看“s”对象时,大多数属性都抛出了这个异常,但是有些属性没有,例如我可以读取LinkFormat属性和其他一些属性而没有问题,但是大多数属性都抛出了一个错误。
下面是我正在使用的代码:
Word.Application WordApp = new Word.Application();
d = WordApp.Documents.Open(@strFilename, ReadOnly: true, Visible: false);
int iReplacements = 0;
int iReplacementNoLink = 0;
foreach (Word.Shape s in d.Shapes)
{
Application.DoEvents();
try
{
if (s.LinkFormat.SourceName.ToString().Contains(".eps") || s.LinkFormat.SourceName.ToString().Contains(".png"))
{
iReplacements++;
}
if (s.AlternativeText != "")
{
iReplacementNoLink++;
}
}
catch (Exception fff)
{
Console.Write(fff);
}
}
检查s.AlternateText的if语句总是在catch中结束。
我正在使用Visual Studio 2013和Office 2007,我不确定这是否相关。
谁能告诉我我需要做什么才能阅读形状的替代文本?如果我以错误的方式去做,或者需要包括一个库,或者如果我需要升级VS或Office?它看起来应该是非常直接的。
感谢您提供的任何帮助。
1条答案
按热度按时间e3bfsja21#
我不知道为什么这工作,但我能够解决这个问题,通过使用“选择”的形状方法。一旦选择了形状,以前抛出错误的大多数属性都将被填充。仍然有大约20个属性抛出错误,但我现在能够访问以前抛出错误的“AlternativeText”,“Name”,“Callout”等内容。