如何获取附加到word文档的文件?

时间:2011-02-21 09:51:23

标签: c# ms-word office-interop

我使用Microsoft.Office.Interop.Word通过c#访问Word文档。某些Word文档中包含对象。这相当于电子邮件附件。

要在Word 2007中的Word文档中插入某些文件,请转到“插入” - >>对象 - >对象...并选择一些文件。

我的问题是,如何使用C#获取文件?

以下是使用Outlook通过电子邮件完成工作的示例:

    protected Microsoft.Office.Interop.Outlook.ApplicationClass outlookApplication = null;
    protected Microsoft.Office.Interop.Outlook._MailItem        mailItem           = null;
    protected Microsoft.Office.Interop.Outlook.NameSpace        mapi               = null;

public OutlookFileExtracter(string filename, string contentPrefix, int startAttachmentNumber)
    this.outlookApplication = new Microsoft.Office.Interop.Outlook.ApplicationClass();
    this.mapi = outlookApplication.GetNamespace("MAPI");
    mailItem = mapi.OpenSharedItem(filename) as Microsoft.Office.Interop.Outlook._MailItem;
}

public Collection<string> GetFileNames()
{
    String extension;
    if (this.fileNamesOrig == null)
    {
        int numberOfFiles = this.mailItem.Attachments.Count;

        this.fileNamesOrig = new Collection<string>();
        this.fileNamesDest = new Collection<string>();
        this.fileValidBools = new Collection<bool>();

        for (int i = 0; i < numberOfFiles; i++)
        {
            //First attachment number is 1
            fileNamesOrig.Add(this.mailItem.Attachments[i + 1].FileName);
            this.fileValidBools.Add(false);
        }

        for (int la = 0; la < numberOfFiles; la++)
        {
            extension = Path.GetExtension(fileNamesOrig[la]).ToUpper().Trim('.');
            this.fileNamesDest.Add(this.contentPrefix + (this.startAttachmentNumber + la) + "." + extension);
        }
    }
    return this.fileNamesOrig;
}

显然Microsoft.Office.Interop.Word不使用附件,但后来我不知道它叫什么。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用System.IO.Packaging类来读取数据。 Word 2007文件只是一个zip文件,因此您所访问的对象可能是您可以阅读的格式。

MSDN上有一系列题为“Word 2007 Visual How Tos”的文章可能会有所帮助: http://msdn.microsoft.com/en-us/library/gg537324(v=office.12).aspx

您可以在此处阅读有关Open XML Format SDK的信息: http://msdn.microsoft.com/en-us/library/bb448854(v=office.12).aspx

答案 1 :(得分:2)

您可能指的是在Office文档中大量使用的OLE。来自维基百科文章:http://en.wikipedia.org/wiki/Object_Linking_and_Embedding

  

对象链接和嵌入(OLE)是Microsoft开发的一种技术,允许嵌入和链接到文档和其他对象。对于开发人员来说,它带来了OLE Con​​trol eXtension(OCX),一种开发和使用自定义用户界面元素的方法。在技​​术层面上,OLE对象是实现IOleObject接口的任何对象,可能还有许多其他接口,具体取决于对象的需求。

该网站最初看起来与您的问题无关,但是,它正在被使用。

如果你想跳过肉,请向下滚动到底部,你会找到一个“外部链接”:http://www.pldaniels.com/ripole/

  

ripOLE是一个小程序/库,用于从OLE2数据文件(即MS Office文档)中提取附件。 ripOLE是BSD许可的,这意味着商业项目也可以使用代码而无需担心许可成本或法律责任。

答案 2 :(得分:1)

正如Arafangion所说,他们是OLE对象,对于他们中的大多数人来说,如果你知道他们是什么,你可以让他们在其他地方导出他们的内容,看看Extract embedded document with the word document其他你可能需要提取二进制内容并希望您的用户可以找到一个应用程序来阅读它。