我一直在尝试用C#解决一个关于用一些额外的新文本信息更新段落文本的问题。
我不是一个C#开发者,如果这个问题很傻或者很容易解决,请原谅我。
我有几个这样的段落。
爱丽丝要去购物
Bob是个好人。
比方说,这几段文字是用Arial字体写的,有11个点。所以我想在每个段落后面添加一些文字。
最终的结果会是。
爱丽丝要去购物了,SomeText0。
鲍勃是个好人.SomeText1
我已经试过了。
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
List<Paragraph> paragraphs = paragraphService.GetParagraphs(wordDoc);
foreach (Paragraph par in paragraphs)
{
string paragraphText = paragraphService.ParagraphToText(par);
paragraphText = textService.DeleteDoubleSpace(paragraphText);
if (paragraphText.Length != 0)
{
if (paragraphText == targetParagraph)
{
//Here I know that the added text will be corresponding to the my target paragraph.
//This paragraph comes from a JSON file but for simplicity I did not add that part.
par.Append(new Run(new Text("SomeText0")));
par.ParagraphProperties.CloneNode(true);
}
}
}
}
添加文本的工作, 但风格是不一样的 和一些随机的风格,我不希望。我希望新添加的文字与段落的字体和大小一样。
我也试过几种方案,让它成为段落,只是文字等。但我找不到解决办法。
任何帮助都将是感激的。
打开的xml格式存储的段落如下图所示
<w:p>
<w:r>
<w:t>String from WriteToWordDoc method.</w:t>
</w:r>
</w:p>
给你
Paragraph
类。Run
类,并。Text
类。所以,你要附加一个新的 <w:r> => Run
元素,它有自己的格式设置,由于你没有指定任何格式,所以使用默认值。
编辑1:而且看起来,当这段文字中有部分格式不一样的时候,一个段落下可以有多个Run元素。
所以,你反而可以找到最后一个包含Text元素的Run元素,修改它的文字。
foreach (Paragraph par in paragraphs)
{
Run[] runs = par.OfType<Run>().ToArray();
if (runs.Length == 0) continue;
Run[] runsWithText = runs.Where(x => x.OfType<Text>().ToArray().Length > 0).ToArray();
if (runsWithText.Length == 0) continue;
Text lastText = runsWithText.Last().OfType<Text>().Last();
lastText.Text += " Some Text 0";
}
希望能帮到你。