penso che sia perché non si può importare un AltChunk
in un documento che viene aperto da un flusso di memoria. Ho avuto lo stesso problema. Stavo aprendo il modello da un flusso di memoria in questo modo:
Private Sub UpdateDoc(templatePath As String)
Using fs As FileStream = File.OpenRead(templatePath)
Using ms As New MemoryStream
CopyStream(fs, ms)
Using doc As WordprocessingDocument = WordprocessingDocument.Open(ms, True)
'update the document
doc.MainDocumentPart.Document.Save()
End Using
End Using
End Using
End Sub
Private Sub CopyStream(source As Stream, target As Stream)
Dim buffer() As Byte
Dim bytesRead As Integer = 1
ReDim buffer(32768)
While bytesRead > 0
bytesRead = 0
bytesRead = source.Read(buffer, 0, buffer.Length)
target.Write(buffer, 0, bytesRead)
End While
End Sub
Questo funziona per gli aggiornamenti normali controlli del contenuto, ecc e il documento va bene quando lo streaming di nuovo al cliente o salvato come docx. Ma danneggia il documento quando si inserisce un AltChunk
.
apertura di un documento da un percorso di file fisico funziona quando si inserisce AltChunk
in questo modo:
Using doc As WordprocessingDocument = WordprocessingDocument.Open(strTempFile, True)
Dim altChunkId As String = "AltChunkId1"
Dim mainDocPart As MainDocumentPart = doc.MainDocumentPart
Dim chunk As AlternativeFormatImportPart = mainDocPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Xhtml,
altChunkId)
Dim strHTML As String = "<html><head/><body><h1>Html Heading</h1><p>This is an html document in a string literal.</p></body></html>"
Using chunkStream As Stream = chunk.GetStream(FileMode.Create, FileAccess.Write)
Using sr As StreamWriter = New StreamWriter(chunkStream)
sr.Write(strHTML)
End Using
End Using
Dim altChunk As New AltChunk
altChunk.Id = altChunkId
mainDocPart.Document.Body.InsertAfter(altChunk, mainDocPart.Document.Body.Elements(Of Paragraph)().Last())
mainDocPart.Document.Save()
End Using
Sembra che non è possibile importare un AltChunk
in un flusso di memoria, si può fare solo quando si apre il file fisico per la scrittura. Qualcuno può far luce su questo argomento?
: La tua risposta è molto utile. Potresti darmi un consiglio per il mio problema ... invece di inserire i dati html nel documento word, voglio ottenere la stringa formattata OOXML per i corrispondenti dati html. Non è necessario aggiornare la parola document.i voglio solo la stringa formattata ooxml ... – Saravanan