1

現在、RTF-FormField を含む Word テンプレートを使用しています。この FormField に、MSSQL データベースから取得したプレーンテキストを挿入したいと考えています。

このメソッドを使用して、ドキュメント内の FormField のコンテンツを設定しています (RTF-FormField を含む)

public static void SetContentControlValue(this WordprocessingDocument doc, string name, string value)
{
    var main = doc.MainDocumentPart;

    var stdRuns = main.Document.Body
                      .Descendants<SdtRun>()
                      .Where(r => r.SdtProperties.GetFirstChild<Tag>().Val.Value.ToLower().Equals(name))
                      .ToList();

    stdRuns.ForEach(c => c.Descendants<Text>().First().Text = value);

    main.Document.Body
                 .Descendants<SdtBlock>()
                 .Where(r => r.SdtProperties.GetFirstChild<Tag>().Val.Value.ToLower().Equals(name))
                 .ToList()
                 .ForEach(c => c.Descendants<Text>().First().Text = value);
}

残念ながら、CarriageReturn/Linefeed を飲み込みます

こんな風にしてみました

var run = new SdtRun();

string[] newLineArray = { Environment.NewLine };
string[] textArray = value.Split(newLineArray, StringSplitOptions.None);

bool first = true;
foreach (var line in textArray)
{
    if (!first)
    {
        run.Append(new Break());
    }
    first = false;

    Text txt = new Text();
    txt.Text = line;
    run.Append(txt);
}
main.Document.Body.Append(run);

残念ながら、これはWordDocumentを壊してしまい、もう開くことができません:-/

ここの誰かが同じ問題を抱えている可能性があり、Plaintext-Formatting (CarriageReturns と Linefeeds) を失わずにテキストを挿入する方法を考えていますか?

4

1 に答える 1