3

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

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ファイルを生成するためにそれを取得できないようです。

どんな助けでもいただければ幸いです。

4

3 に答える 3

3

コンテンツコントロールのプロパティには、「キャリッジリターンを許可する」オプションがあります。これをオンにして、使用するとEnvironment.NewLine完全に機能しました。

于 2011-06-28T15:46:29.383 に答える
1

少なくとも私が知る限り、利益を得るためには、それらを段落で囲む必要があると思います。したがって、結果の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が得られない限り、OOXMLパッケージ "document.xml"を開いて、XMLが無効な場所を正確に確認しましたか?

編集:

OOXML SDK 2.0には、便利な検証ツールがいくつか付属しています。

于 2011-06-28T14:34:38.293 に答える
0

生のXMLを介して、次のものを追加できます。

<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
于 2013-09-05T21:03:21.103 に答える