gpt4 book ai didi

c# - 循环创建 MS Word 内容控件

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:20 27 4
gpt4 key购买 nike

我是一名经验丰富的 C# 开发人员,在项目的这个特定阶段抽签并开始处理文档生成(团队中没有人对此有任何特殊经验)。

对于 Word 输出,到目前为止,我一直在使用文档中嵌入的内容控件和 DocumentFormat.OpenXml 包中的一些方法来创建我可以在代码中识别的字段,并动态地替换为适当的数据。所以我加载了一个模板,并像这样循环访问内容控件:

string template = serverRoot + @"Templates\MyTemplate.docx";
string path = serverRoot + @"DataOut\\" + clientName + "\\MyDocument.docx";
File.Copy(template, path, true);

using (WordprocessingDocument newDoc = WordprocessingDocument.Open(path, true))
{
MainDocumentPart mainPart = newDoc.MainDocumentPart;
var placeHolders = mainPart.Document.Body.Descendants<SdtElement>();

foreach (var sdtRun in placeHolders)
{
Console.WriteLine("Found Field: " + sdtRun.SdtProperties.GetFirstChild<Tag>().Val.Value);
switch (sdtRun.SdtProperties.GetFirstChild<Tag>().Val.Value)
{
//check the content control values and replace them
}
}
}

但是,根据情况,我的下一个文档需要不确定数量的重复元素。或者换句话说,对于包中的每个文件,它需要将类似这样的内容输出到文档中:

Filename: <insert filename>
Quantity: <insert quantity>
Date: <insert date>

但我们事先并不知道会有多少文件。

据我所知,我不能用标准的内容控件来做到这一点,至少在保留任何类型的合理格式的情况下不能。

这里最好的方法是什么。我是否应该将整个文本生成为一个 block ,添加换行符等,然后将其全部塞入一个内容控件中?即时创建新的内容控件(如果是,如何创建)?或者有更好的方法吗?

最佳答案

我最后采取了胆小鬼的方式,并使用了一个内容控件,我在其中添加了一个在循环内构建的详细 Run 对象:

private Run ParseForOpenXML(string textualData)
{
Run run = new Run();

//split string on paragraph breaks, and create a Break object for each
string[] newLineArray = { Environment.NewLine, "\n" };
string[] textArray = textualData.Split(newLineArray, StringSplitOptions.None);
bool first = true;

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

//split string on tab breaks, and create a new TabChar object for each
bool tFirst = true;
string[] tabArray = line.Split('\t');
foreach(string fragment in tabArray)
{
if (!tFirst)
{
run.Append(new TabChar());
}
tFirst = false;

Text txt = new Text();
txt.Text = fragment;
run.Append(txt);
}
}

return run;
}

关于c# - 循环创建 MS Word 内容控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23240629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com