我试图遍历文档中的所有形状,并检查它们的“替代文本”,该文本已将该图像的源文件名记录为替代文本。我需要阅读特定的源图像并将其转换为其他图像格式。
我能够读懂形状的AlternateText,但它会引发异常:'(((Microsoft.Office.Interop.Word.Shape)(s))。AlternativeText'引发了类型为'System.Runtime的异常.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?似乎应该很简单。
感谢您提供的任何帮助。
我不确定为什么这样做,但是我可以通过使用形状的“选择”方法来解决此问题。选择形状后,将填充先前抛出错误的大多数属性。仍然有大约20个属性引发错误,但是我现在可以访问以前引发错误的内容,例如“ AlternativeText”,“ Name”,“ Callout”。
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.Type == Microsoft.Office.Core.MsoShapeType.msoLinkedPicture)
if (s.LinkFormat.SourceName.ToString().Contains(".eps") || s.LinkFormat.SourceName.ToString().Contains(".png"))
{
iReplacements++;
}
s.Select();
if (s.AlternativeText != "" && s.AlternativeText != null)
{
iReplacementNoLink++;
}
}
catch (Exception fff)
{
Console.Write(fff);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句