将列表传递给列表<T>

passing a list to a list<T>

我正在使用 openxml,有些事情让我很头疼,基本上我正在编辑一个现有的文档,它是一个模板,该模板应该保留第一页和第二页,所以我的每一节add(paragraph, table etc..) 它应该在两页之间添加,我已经做到了,我可以插入一个简单的 table 这种方式

      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页末尾的段落并在后面插入table。我的问题是:我没有收到来自前端网页的单个部分,我收到了部分列表,我将此列表定义为没有定义类型的对象列表,因为它可以包含表格、段落和其他内容。

基本上我有这个:

List<Object> listOfSections = new List<Object>();

从前端接收sections,用key识别是什么:

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)

我可以投射对象列表或做其他事情吗?这里需要一些帮助。

您可以反向迭代列表,使列表中的第一个元素紧跟在 paragraph 之后,然后是第二个,然后是第三个,依此类推。

for (int i = listOfSections.Count - 1; i >= 0; i--)
{
    mainPart.Document.Body.InsertAfter(listOfSections[i], paragraph);
}

如果您从包含以下元素的列表开始:

Element1
Element2
Element3
Element4

文档开头为:

Paragraph

然后在每次迭代之后你会得到:

迭代 1

Paragraph
Element4

迭代 2

Paragraph
Element3
Element4

迭代 3

Paragraph
Element2
Element3
Element4

最后,迭代 4

Paragraph
Element1
Element2
Element3
Element4

这是想要的结果。