Откройте XML SDK для редактирования Активного документа - PullRequest
8 голосов
/ 14 марта 2010

Можно ли использовать Open XML SDK для управления частями документа, который в данный момент открыт в приложении Office (word / ppt). Я знаю, что проще всего использовать VSTO, но он медленный и предполагает использование буфера обмена для вставки элементов, OXML SDK является прямым и простым.

Если бы кто-нибудь мог опубликовать пример кода, это было бы здорово.

Заранее спасибо
Ракеш

Ответы [ 4 ]

5 голосов
/ 03 июля 2012

Да, можно изменить открытый документ VSTO, используя OpenXML SDK 2, а затем обновить ваш открытый документ, используя измененный XML.

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

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

По сути, вы получаете xml из диапазона, обрабатываете его как поток, упаковываете его, используете sdk в пакете, а затем вставляете измененный xml обратно, полностью изменяя процесс.

Мудрость в том, что использование здравого смысла в sdk невозможно. Однако это просто неправильно.

0 голосов
/ 02 марта 2016

Я смог сделать это с помощью документа Excel, используя ClosedXML как таковой (после сохранения файла на диске в качестве пути 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);
    ...
}

В моем случае я только читаю документ и не буду его сохранять, но вы можете записать измененный поток в другой файл, если это необходимо.

0 голосов
/ 19 марта 2010

Очевидно, что вы не можете сделать это без Sharepoint.

Согласно Зейад Джараби / ..

... вам нужна платформа, которая понимает, как брать общую блокировку (например, SharePoint или SkyDrive). Без этой концепции приложение и SDK могут только блокировать чтение или запись, что препятствует доступу этих двух частей технологии к одному и тому же файлу.

0 голосов
/ 14 марта 2010

Примерно так: -

//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.

...