2010-03-14 11 views
8

È possibile utilizzare il sdk Open XML per modificare parti del documento attualmente aperto nell'app Office (parola/ppt). So che la cosa più semplice è usare VSTO, ma è lento e implicherebbe l'uso degli appunti per inserire elementi, il sdk di OXML è diretto e più semplice.Apri SDK XML per modificare il documento attivo

Se qualcuno potesse pubblicare un esempio di codice sarebbe fantastico.

Grazie in anticipo
Rakesh

risposta

-1

Apparentemente non è possibile farlo senza Sharepoint.

Come da Zeyad Jarabi/..

... avete bisogno di una piattaforma che capisce come prendere un blocco condiviso (come SharePoint o SkyDrive). Senza questo concetto, l'applicazione e l'SDK possono prendere solo blocchi di lettura o scrittura, il che impedisce a questi due componenti di accedere allo stesso file.

+0

Maggiori informazioni qui http://blogs.msdn.com/b/brian_jones/archive/2009/11/23/open-xml-sdk -word-automation-services-presentation-at-pdc.aspx – GustavoTM

+0

Questo è errato e irrilevante. Tristemente anche la risposta accettata. –

0

Qualcosa di simile qui di seguito: -

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

Inoltre, è possibile utilizzare LINQ per evitare loop foreach.

+0

Siamo spiacenti, se non ero chiaro in precedenza. Voglio manipolare il documento che è attualmente aperto in Word. Creo 'un bottone nella barra multifunzione che aggiunge parti al documento correntemente attivo. Ciò significherebbe che il documento potrebbe non essere salvato quando si esegue questa azione, quindi nessun percorso file. C'è un modo per convertire l'oggetto ActiveDocument in un oggetto WordProcessingDocument Grazie R – user240282

5

sì, è possibile modificare un documento VSTO aperto, utilizzando l'OpenXML SDK 2, quindi aggiornare il documento aperto utilizzando il codice XML modificato.

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

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

sostanzialmente si ottiene il XML da un intervallo, trattarlo come flusso, pacchetto in su, utilizzare l'SDK sul pacchetto, quindi inserire l'XML modificato posteriore invertendo il processo .

La saggezza è che questo uso del senso comune del sdk non è possibile. Tuttavia, questo è semplicemente sbagliato.

0

sono stato in grado di farlo utilizzando un documento di Excel utilizzando ClosedXML in quanto tale (dopo aver salvato il file su disco come il percorso 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); 
    ... 
} 

Nel mio caso io sono solo leggendo il documento e non sarà salvarlo, ma è possibile scrivere lo stream modificato su un altro file, se necessario.

Problemi correlati