我正在尝试遍历文档中的所有形状并检查它们的"备用文本"已将该图像的源文件名记录为其替换文本。我需要阅读特定的源图像并将它们转换为不同的图像格式。
我能够达到读取形状的AlternateText但它会引发异常: '((Microsoft.Office.Interop.Word.Shape)(S))AlternativeText&#39。抛出了#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?看起来它应该是非常直接的。
感谢您提供任何帮助。
答案 0 :(得分:2)
我不确定为什么会这样,但我能够通过使用" Select"来解决这个问题。形状的方法。选择形状后,将填充之前抛出错误的大多数属性。仍然有大约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);
}
}