我正在使用openxml,并且有一些东西可以拉我的头发,基本上我正在编辑pré现有文档,它是一个模板,模板应该保留第一页和第二页,所以我添加的每个部分(段落,表等。)它应该在2页之间添加,我已经完成了,我可以插入一个简单的表这样:
DocTable docTable = new DocTable();
Paragraph paragraph = doc.MainDocumentPart.Document.Body.Descendants<Paragraph>()
.Where<Paragraph>(p => p.InnerText.Equals("some Text")).First();
Table table = docTable.createTable(Convert.ToInt16(2), Convert.ToInt16(2));
mainPart.Document.Body.InsertAfter(table, paragraph);
我基本上搜索第1页末尾的pargraph并在之后插入表格。我的问题是:我没有从frontEnd网页收到一个部分,我收到一个部分列表,我将此列表定义为没有定义类型的对象列表,因为它可以有表,段落和其他东西。
基本上我有这个:
List<Object> listOfSections = new List<Object>();
从前端接收部分,并用以下方法识别密钥:
foreach (DocumentAtributes section in sections.atributes)
{
if(section.key != "Document")
{
checkSection(mainPart, section, listOfSections);
}
}
public void checkSection(MainDocumentPart mainPart,DocumentAtributes section,List<Object> listOfSections)
{
switch (section.key)
{
case "Table":
DocTable docTable = new DocTable();
Table table = docTable.createTable(Convert.ToInt16(section.rows), Convert.ToInt16(section.cols));
listOfSections.Add(new Run(table));
break;
case "Paragraph":
DocRun accessTypeTitle = new DocRun();
Run permissionTitle = accessTypeTitle.createParagraph(section.text, PARAGRAPHCOLOR, Convert.ToInt16(section.fontSize), DEFAULTFONT,section.align);
listOfSections.Add(permissionTitle);
break;
case "Image":
DocImage docImage = new DocImage();
Run image = docImage.imageCreatorFromDisk(mainPart, "abcd", Convert.ToInt16(section.width), Convert.ToInt16(section.height), section.align, null, null, section.wrapChoice, section.base64);
listOfSections.Add(image);
break;
}
}
我需要一种方法将此列表添加到insertAfter,它必须是列表我无法添加单个对象,因为在我插入第一个之后,下一个部分将在段落之后添加它或者它带给我一个问题,因为我希望订单与sections.atributes中的订单相同。
所以insertAfter接受一个列表,我有一个对象列表,方法是这样的:insertAfter(List,refChild)
我可以投射我的物品清单或做其他事情吗?需要一些帮助。
答案 0 :(得分:2)
您可以反向迭代列表,使paragraph
之后的第一个元素紧随其后,然后是第二个,然后是第三个等。
for (int i = listOfSections.Count - 1; i >= 0; i--)
{
mainPart.Document.Body.InsertAfter(listOfSections[i], paragraph);
}
如果您从包含元素的列表开始:
元素1
元素2
元素3
元素4
文件始于:
段落
然后在每次迭代后,你最终得到:
迭代1
段落
元素4
迭代2
段落
元素3
元素4
迭代3
段落
元素2
元素3
元素4
最后,迭代4
段落
部件1
元素2
元素3
元素4
这是期望的结果。