3

私はOpenXML SDK ver 2いくつかの単語文書を操作するために使用しています。ドキュメントには現在、カスタム xml パーツがあり、私がやりたいことは、特にパーツの xml を置き換えることです。

ドキュメントの customxml 部分にアクセスするには、次のようなことができることを知っています。

Dim mainStream As New MemoryStream()
Dim buffer As Byte() = File.ReadAllBytes(Server.MapPath("myfile.docx"))
mainStream.Write(buffer, 0, buffer.Length)

Try
  Using mainDocument As WordprocessingDocument = WordprocessingDocument.Open(mainStream, True)

  MainDocumentPart mainPart = mainDocument.MainDocumentPart;
  'collection of custom xml parts
   Dim parts = mainPart.CustomXmlParts
   For Each part As CustomXmlPart In parts
     'how do I replace the xml here??
   Next

しかし、ご覧のとおり、パーツの XML を置き換える方法がわかりません。私のドキュメントには、item1.xml と item2.xml という 2 つの XML 部分があります。それらの部分の XML を置き換えたい。.DeleteParts() を使用して既存の xml パーツを削除し、AddCustomXmlPart() を使用して新しいパーツを作成できることはわかっていますが、そうしたくありません。既存のパーツの XML を置き換えたいだけです。

誰かが私がこれを行う方法を提案できますか? アドバイスをいただければ幸いです。

ありがとうございました。

編集おっと、コードタグを忘れました

4

1 に答える 1

5

FeedData()インスタンスのメソッドを使用してCustomXmlPart、カスタム xml 部分の XML を置き換えます。このFeedData()メソッドは、最初にパーツのストリームを切り捨て、次に新しいデータをパーツ ストリームに書き込みます。したがって、このメソッドを使用して、既存のカスタム xml パーツの XML を置き換えることができます。

MainDocumentPart mainPart = mainDocument.MainDocumentPart;

Dim parts = mainPart.CustomXmlParts

For Each part As CustomXmlPart In parts

  Dim ms As New MemoryStream
  Dim xtw As New XmlTextWriter(ms, Encoding.UTF8)

  ' Create your xml.'

  xtw.WriteStartDocument() 
  xtw.WriteStartElement("bla")
  xtw.WriteEndElement()
  xtw.WriteEndDocument()
  xtw.Flush()

  ms.Seek(0, SeekOrigin.Begin)

  part.FeedData(ms) ' Replace old xml in part stream.'

  xtw.Close()    

Next
于 2012-07-24T18:16:59.020 に答える