テンプレートとして機能する Word 文書の特定の場所を置き換えようとしています。これらの場所は、 で始まる単語としてマークされています@
。たとえば@Name
。すべてのテキストを選択し、関数でそれらを実行して置き換えます。その背後にあるすべてのロジックは正常に機能しています。ただし、理由は不明ですが、テキストは次のように単純に定義されています。
List<Text> texts = w.MainDocumentPart.Document.Descendants<Text>().ToList();
私が期待する方法ではありません。例 (各行に 1 つのテキストがあるテキストの短いリスト):
Document date:
@
date
, written by:
@Name
@
Surname
このように1行にあるはずですが: Document date: @date, written by: @Name @Surname
. ご覧のとおり、@
およびdate
OR@
およびSurname
のような場合、代わりのメソッドを適切に使用することができませ@date
ん@Surname
。だから私は自分のコードを改善しましたが、今ではその中に多くの欠陥があることがわかりました@
。残念ながら、私はテーブル内の 1 つのテキストにたどり着き、それによってすべてのアルゴリズムが完全に停止してしまいました。次のようでした。
(@
sum_
words)
さまざまなスタイルで特別にフォーマットしたわけではありませんが。ご覧のとおり、 である必要が(@sum_words)
あり、この場合、私のアルゴリズムは簡単に置き換えられます。残念ながら、私にはできません。したがって、私の質問は次のようになります。
- 単語の部分をまったく変えていないのに、部分に分かれているのはなぜですか?
- これを解決する方法はありますか?
アップデート
これまでにできた最高のことは次のとおりです。
for (int i = texts.Count - 1; i > 0; i--)
{
if (texts[i - 1].Text.EndsWith("@") || texts[i - 1].Text.EndsWith("_"))
{
texts[i - 1].Text = texts[i - 1].Text + texts[i].Text;
texts[i].Text = "";
}
}
テキストが途中で分割された場合にテキストを接続します(私が見たところ、私のニーズに固有の文字でのみ分割されます@
および_
。最初のテキストのプロパティを保存する方が理にかなっているため、ループは逆になります最後の部分ではなく、グループの一部 (たとえば、要素の前のスペースを保持します)。
更新 2
要求されたテーブル セルは次のとおりです。
<w:tc>
<w:tcPr>
<w:tcW w:w="2410" w:type="dxa"/>
<w:tcBorders>
<w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
</w:tcBorders>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p w:rsidR="009D473B" w:rsidRDefault="00385754" w:rsidP="00385754">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:lang w:val="lt-LT"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:lang w:val="lt-LT"/>
</w:rPr>
<w:t>@sum</w:t>
</w:r>
<w:r w:rsidR="009D473B">
<w:rPr>
<w:lang w:val="lt-LT"/>
</w:rPr>
<w:t xml:space="preserve">(@</w:t>
</w:r>
<w:r>
<w:rPr>
<w:lang w:val="lt-LT"/>
</w:rPr>
<w:t>sum_</w:t>
</w:r>
<w:r w:rsidR="009D473B">
<w:rPr>
<w:lang w:val="lt-LT"/>
</w:rPr>
<w:t>words)</w:t>
</w:r>
</w:p>
</w:tc>