2010-03-14 25 views
8

¿Es posible utilizar Open XML SDK para manipular partes del documento que actualmente está abierto en la aplicación de Office (word/ppt). Sé que lo más fácil es utilizar VSTO, pero es lento e implicaría el uso del portapapeles para insertar elementos, el sdk OXML es directo y más simple.Abrir XML SDK para editar el documento activo

Si alguien pudiera publicar una muestra de código que sería genial.

Gracias de antemano
Rakesh

Respuesta

-1

Aparentemente no puede hacer esto sin Sharepoint.

Según Zeyad Jarabi/..

... necesita una plataforma que entienda cómo tomar un bloqueo compartido (como SharePoint o SkyDrive). Sin este concepto, la aplicación y el SDK solo pueden tomar bloqueos de lectura o escritura, lo que impide que estas dos piezas de tecnología accedan al mismo archivo.

+0

Más información aquí http://blogs.msdn.com/b/brian_jones/archive/2009/11/23/open-xml-sdk -word-automation-services-presentation-at-pdc.aspx – GustavoTM

+0

Esto es incorrecto e irrelevante. Tristemente también la respuesta aceptada. –

0

Algo parecido a continuación: -

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

Además, se puede usar LINQ para evitar foreach.

+0

Lo siento, si no estaba claro antes. Quiero manipular el documento que está abierto actualmente en Word. Crearía un botón en la cinta que agrega partes al documento actualmente activo. Esto significa que el documento no puede guardarse al ejecutar esta acción, por lo tanto, no hay una ruta de archivo. ¿Hay una manera de convertir el objeto en un objeto ActiveDocument WordProcessingDocument Gracias R – user240282

5

Sí, es posible modificar un documento VSTO abierto, utilizando el SDK OpenXML 2, a continuación, actualizar el documento abierto utilizando el código XML modificado.

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

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

Básicamente, te dan el código XML de una serie, lo tratan como una corriente, empaquetarlo, utilice el SDK en el paquete, a continuación, insertar el código XML modificado vuelta invirtiendo el proceso .

La sabiduría que existe es que este uso del sentido común de la SDK no es posible. Sin embargo, esto es simplemente incorrecto.

0

que era capaz de hacer esto utilizando un documento de Excel usando ClosedXML como tal (después de guardar el archivo en el disco como el camino 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); 
    ... 
} 

En mi caso yo sólo estoy leyendo el documento y no guardarlo, pero puede escribir la secuencia modificada en otro archivo si es necesario.

Cuestiones relacionadas