2011-06-28 4 views
3

私は、CustomXMLPartファイルを書き換えてワードドキュメントを更新しています。私は基本的には、このチュートリアルに従ってきました:http://blogs.msdn.com/b/brian_jones/archive/2009/01/05/taking-advantage-of-bound-content-controls.aspxCustomXMLPartの改行

private bool _makeDoc() 
     { 

     var path = HttpContext.Current.Server.MapPath("~/Classes/Word/template.docx"); 
     using (WordprocessingDocument myDoc = WordprocessingDocument.Open(path, true)) 
     { 
      //create new XML string 
      //these values will populate the template word doc 
      string newXML = "<root>"; 
       newXML += "<name>"; 
       newXML += "name goes here"; 
       newXML += "</name>"; 
       newXML += "<bio>"; 
       newXML += "text" + "more text"; 
       newXML += "</bio>"; 
      newXML += "</root>"; 

      MainDocumentPart mainPart = myDoc.MainDocumentPart; 

      //delete old xml part 
      mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts); 

      //add new xml part 
      CustomXmlPart customXml = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml); 
      using(StreamWriter ts = new StreamWriter(customXml.GetStream())) 
      { 
       ts.Write(newXML); 
      } 
      myDoc.Close(); 
     } 
     return true; 
    } 

問題は、私は「テキスト」と「複数のテキスト」の間に改行を追加する方法を見つけ出すことができないということです。私はEnvironment.NewLineを試しました、私は<w:p><w:r><w:t>タグでそれをラップしようとしました。私はそれが有効なdocxファイルを生成するように見えることはできません。

ご協力いただければ幸いです。

答えて

3

コンテンツコントロールのプロパティには、「キャリッジリターンを許可する」というオプションがあります。これをオンにし、Environment.NewLineを使用すると完全に動作しました。あなたが追加することができ、生のXMLを介した

1

私は少なくとも私が知っている限り、返品を得るために段落にそれらをラップする必要がありますと信じています。これを行うと、それが有効なOOXMLが生じないよう、あなたがOOXMLパッケージ「document.xml」を開き、XMLが無効である場所を正確に見ているので、あなたの結果のOOXMLは、限り、

<w:p><w:r><w:t>Text</w:t></w:r></w:p> 
<w:p><w:r><w:t>More text</w:t></w:r></w:p> 

を次のようになりますか?

編集:

OOXML SDK 2.0あなたが役立つかもしれないいくつかの検証ツールが付属しています。

+0

は、Word文書をデバッグするためのツールのいくつかの並べ替えがあり、またはあなただけのブラウザフラグを無効を聞かせピース? –

+0

@Cory OOXML SDK 2.0には、IEのようなものでXMLを開くより役立つバリデーションツールが組み込まれています。私は私の応答にリンクを追加します。 –

+0

Brandonに感謝します。私はXMLを見てみましたが、document.xmlにはデータバインディングタグがあるだけなので、それは役に立ちませんでした。しかし、私はさらに簡単な答えを発見した、私はそれを投稿します。 –

0

<w:r> 
    <w:br /> 
    </w:r> 

OOXML SDK経由:

Paragraph paragraph1 = new Paragraph(); 
Run breakRun = new Run(); 
breakRun.Append(new Break()); 
paragraph1.Append(breakRun); 

_document.MainDocumentPart.Document.AppendChild<Paragraph>(paragraph1); 
//where _document is the WordProcessingDocument instance