2017-08-30 8 views
0

で読み取られている同じOpenXmlPartに書き込む方法はありますか?私は読者と物事を検出し、潜在的にOpenXmlWriterで場所に物事を書くつもりです。ここでは動作しないサンプルは次のとおりです。同じOpenXmlPartへの書き込みは

var ms = new MemoryStream(); 
var doc = WordprocessingDocument.Create(ms, WordprocessingDocumentType.Document); 

MainDocumentPart part = doc.AddMainDocumentPart(); 
part.Document = new Document(new Body(new Paragraph(), new Paragraph())); 
doc.Save(); 

var stream = part.GetStream(); 
var reader = OpenXmlReader.Create(stream); 
var writer = OpenXmlWriter.Create(stream); 

reader.Read(); // read w:document 
reader.ReadFirstChild(); // read w:body 
reader.ReadFirstChild(); // read 1st w:p 
writer.WriteElement(new Table()); // try to insert w:tbl 

doc.Save(); // observe only the 2 paragraphs in the `w:body`. 

カバーの下にオープンXML SDKは、カバーの下にXmlReaderXmlWriterを使用しているので、おそらくそれらを同期させる方法があるように見えますか?

答えて

1

したがって、OpenXmlReaderOpenXmlWriterをすぐに同期させる方法はないようです。

私がやったのは、OpenXmlReaderを読んでいる間に、元の文書を複製し、条件付きで部品をクリアして書き込むことでした。ここで

は、私が何をしたかの単純化したモデルである:

var ms = new MemoryStream(); 
var inputDoc = WordprocessingDocument.Create(ms, WordprocessingDocumentType.Document); 

MainDocumentPart inputMainPart = inputDoc.AddMainDocumentPart(); 
inputMainPart.Document = new Document(new Body(new Paragraph(), new Paragraph())); 
input.Save(); 

var outputDoc = input.Clone(); 
outputDoc.RemovePart(outputDoc.MainDocumentPart); 
var outputMainPart = outputDoc.AddMainDocumentPart(); 


var reader = OpenXmlReader.Create(inputMainPart); 
var writer = OpenXmlWriter.Create(outputMainPart); 
// write body/document 

reader.Read(); // read w:document 
reader.ReadFirstChild(); // read w:body 
reader.ReadFirstChild(); // read 1st w:p 

do { 
    writer.WriteElement(new Table()); // insert w:tbl 
    writer.WriteElement(reader.LoadCurrentElement()); 
} while(reader.ReadNextSibling()); 
doc.Save(); // observe only the 2 paragraphs in the `w:body`. 
関連する問題