8

是否可以使用 Open XML sdk 来操作当前在 Office 应用程序中打开的部分文档(word/ppt)。我知道最简单的方法是使用 VSTO,但它速度慢并且会涉及使用剪贴板插入元素,OXML sdk 更直接且更简单。

如果有人可以发布一些代码示例,那就太好了。

在此先感
谢拉克什

4

4 回答 4

5

是的,可以使用 OpenXML sdk 2 修改打开的 VSTO 文档,然后使用更改后的 xml 更新打开的文档。

http://msdn.microsoft.com/en-us/library/ff191178.aspx

http://code.msdn.microsoft.com/Improve-Automation-415bff13

基本上,您从一个范围中获取 xml,将其视为流,将其打包,使用包上的 sdk,然后通过反转过程将修改后的 xml 插入回去。

那里的智慧是,sdk 的这种常识用法是不可能的。然而,这是错误的。

于 2012-07-03T00:55:33.993 回答
0

如下所示:-

//include the namespace

using DocumentFormat.OpenXml.WordProcessing

//Open and manipulate temp.docx 

using (WordprocessingDocument myDoc = WordprocessingDocument.Open("temp.docx", true)) 
{
    //Access main part of document 
    MainDocumentPart mainPart = myDoc.MainDocumentPart; 

    //Add new comments part to document 
    mainPart.AddNewPart<WordprocessingCommentsPart>(); 

    //Delete Styles part within document 
    mainPart.DeletePart(mainPart.StyleDefinitionsPart); 

    //Iterate through all custom xml parts within document 
    foreach (CustomXmlPart customXmlPart in mainPart.CustomXmlParts) {
        //DO SOMETHING 
    }
}

此外,您可以使用 LINQ 来避免 foreach 循环。

于 2010-03-14T13:24:16.613 回答
0

我能够使用使用 ClosedXML 的 Excel 文档来做到这一点(在将文件作为路径 excelFileName 保存到磁盘之后):

byte[] byteArray = null;
using (var fs = new FileStream(excelFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    int numBytesToRead = Convert.ToInt32(fs.Length);
    byteArray = new byte[numBytesToRead];
    fs.Read(byteArray, 0, numBytesToRead);
}
using (MemoryStream mem = new MemoryStream()) {
    mem.Write(byteArray, 0, byteArray.Length);
    XLWorkbook wb = new XLWorkbook(mem);
    ...
}

在我的情况下,我只是在阅读文档并且不会保存它,但是如果需要,您可以将修改后的流写入另一个文件。

于 2016-03-01T21:18:34.443 回答
-1

显然,如果没有 Sharepoint,您将无法做到这一点。

根据Zeyad Jarabi /..

...您需要一个了解如何获取共享锁的平台(如 SharePoint 或 SkyDrive)。如果没有这个概念,那么应用程序和 SDK 只能获取读或写锁,这会阻止这两种技术访问同一个文件。

于 2010-03-19T15:56:08.917 回答