2010-05-20 223 views
43

我使用OPENXML WordProcessingDocument打開Word模板,並用字符串替換佔位符X1。這工作正常,除非我需要字符串來包含換行符。 我怎麼能代替X1文本可能包含單詞會認換行?我曾嘗試\ n \ r但這些不工作使用換行符OpenXML的

剛到Word模板被打開,當我讀入一個StreamReader然後使用.Replace來代替X1進一步解釋。

+1

這不是真棒,但:'.Replace(Environment.NewLine,「」)'可能適合你。 – BrainSlugs83 2013-12-07 09:52:40

+0

@ BrainSlugs83:對此有何想法? http://stackoverflow.com/questions/26307691 – slayernoah 2014-10-10 21:13:01

回答

68

要插入新行,你有一個Break實例添加到Run

例子:

run.AppendChild(new Text("Hello")); 
run.AppendChild(new Break()); 
run.AppendChild(new Text("world")); 

生產的將是這樣的XML:

<w:r> 
    <w:t>Hello</w:t> 
    <w:br/> 
    <w:t>world</w:t> 
</w:r> 
+0

我不認爲我可以使用你的答案在我的處境。我更新了我的問題以進一步解釋 – Danny 2010-05-20 09:18:40

+0

因此,您是直接使用XML?在這種情況下,嘗試像例子一樣插入XML。 – codeape 2010-05-20 10:22:22

+2

你是否能夠得到它的工作? – codeape 2010-05-21 12:56:54

17

下面是將一個字符串,將它在換行,呈現在OpenXML的一個C#的功能。要使用,實例化一個Run並將其傳遞給帶有字符串的函數。

void parseTextForOpenXML(Run run, string textualData) 
{ 
    string[ ] newLineArray = { Environment.NewLine }; 
    string[ ] textArray = textualData.Split(newLineArray, StringSplitOptions.None); 

    bool first = true; 

    foreach (string line in textArray) 
    { 
     if (! first) 
     { 
      run.Append(new Break()); 
     } 

     first = false; 

     Text txt = new Text(); 
     txt.Text = line; 
     run.Append(txt); 
    } 
+1

niceeeee解決方案的孩子的孩子,感謝的很多,我用的時候,我字符串包含\ n \這個解決方案r – jiji2663 2014-12-07 14:34:04

7

我有同樣的問題,在我的情況下<w:br />標籤工作。

+0

工作就像一個魅力!坦克你非常! – BertuPG 2015-12-03 13:17:52

7

Altough這個問題已經回答了我有另一種方法來解決這樣的問題:

我怎樣才能讓XXX與OpenXML的?

在這種情況下,你可以利用強大的微軟的OpenXML的生產力工具(又稱OpenXmlSdkTool)的。 Download here.

  1. 創建一個新的Office文檔
  2. 部件添加到您想複製與OpenXML的SDK文檔。
  3. 公開賽微軟的OpenXML的生產力工具
  4. 單擊Office文檔上「反映代碼」
  5. 在右邊你會看到你現在文件反映到C#代碼。
+0

這是一個很好的答案!我在研究了一些棘手的開放xml位後,不得不穀歌幾乎每個元素的內部工作。有一個工具,可以輸出技巧位並粘貼他們是一個主要的節省時間,謝謝。 – dougajmcdonald 2015-12-11 09:52:58