與this post有關,我一直在大量使用Word的Open XML和可用的庫。大多數人似乎都不知道的是,有一些很好的resources用於編程式地處理Word的Open XML格式(並且我不是指手動將XML寫入文件流!)。開放式XML - 錯誤格式
我的問題是關於我正在做的事情。基本上,我手動創建郵件合併。現在,郵件合併實際上可以正常工作,但是,不能正常工作的是將郵件合併域放在文檔中。這是我在做什麼:
string mergeFieldName = m.Value.Replace("[", string.Empty).Replace("]", string.Empty);
Body body = new Body();
DocumentFormat.OpenXml.Wordprocessing.Paragraph p = new DocumentFormat.OpenXml.Wordprocessing.Paragraph();
SimpleField simpleField = new SimpleField() { Instruction = " MERGEFIELD " + mergeFieldName + " " };
Run run = new Run();
RunProperties runProperties = new RunProperties();
NoProof noProof = new NoProof();
runProperties.Append(noProof);
Text text = new Text("«" + mergeFieldName + "»");
run.Append(runProperties);
run.Append(text);
simpleField.Append(run);
p.Append(simpleField);
body.Append(p);
docXml.InnerXml = docXml.InnerXml.Replace(m.Value, body.InnerXml);
變量m
實際上是基於方括號內我的正則表達式匹配一切Match
對象。 (你也許會奇怪,爲什麼我這樣做像我 - 這不是在這裏有關)
我的問題是生成的XML是無效的,因爲我有以下幾點:
<w:p w:rsidR="00945DC1" w:rsidRDefault="006878CA">
<w:r>
<w:t xml:space="preserve">
<w:p xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:fldSimple w:instr=" MERGEFIELD FullName ">
<w:r>
<w:rPr>
<w:noProof />
</w:rPr>
<w:t>«FullName»</w:t>
</w:r>
</w:fldSimple>
</w:p>
</w:t>
</w:r>
</w:p>
而且這裏有一個例子從手工創建的文檔工作XML:
<w:p w:rsidR="001B2242" w:rsidRDefault="001B2242">
<w:r>
<w:tab/>
</w:r>
<w:fldSimple w:instr=" MERGEFIELD "SalutationName" ">
<w:r>
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t>«SalutationName»</w:t>
</w:r>
</w:fldSimple>
</w:p>
實際的錯誤,我得到的是「文件無法打開,因爲有問題與內容」。如果我不寫郵件合併領域,加載文檔,然後插入郵件合併領域,它的工作原理。所以實際的郵件合併是正確的,只是郵件合併字段不正確。 (請參閱我的引用文章,瞭解如何獲取郵件合併)。
對此有何意見?
乾杯