Novacode DocX表中超过15列

时间:2015-08-20 13:12:45

标签: c# docx novacode-docx

有没有办法使用Novacode DocX创建超过15列的单词表?

如果我创建一个包含超过14列的新表格,则该表格不会显示。我可以通过这样做来解决这个问题:

int addCols = Math.Min(data.colCount, 14);
Table docTable = doc.InsertTable(data.rowCount, addCols);

然后是这个:

docTable.InsertColumn();

但是,如果我尝试不止一次地创建一个包含16个或更多列的表格,那么表格不会出现同样的问题。

有什么方法吗?

2 个答案:

答案 0 :(得分:1)

这是我的方法。如果您需要许多具有随机大量列的不同表,这可能不起作用,因为这需要大量工作。

using (DocX template = DocX.Load("template.docx"))
{
     Novacode.Table tempTable;
     using (DocX template2 = DocX.Load("template2.docx"))
     {
          tempTable = template2.Tables[0];
     }
     Novacode.Table t1 = doc.InsertTable(tempTable);
     t1.InsertRow();
     t1.InsertRow();
     template.Save();
}

这是一种可能的解决方案。 template是您要插入DocX的{​​{1}}。 Table包含预制的template2,它是1行,并且包含您想要的列数。因此Tables的大小为template2.Table[0](1,15)。然后,您可以向Table添加更多Tables(在代码之外,通过在Microsoft Word中的文档中创建它们)变得更大:template2将是template2.Table[1]大小(1, 16)。唯一的问题是,如果您需要使用许多不同数量的列TableTables不是一个非常好的从头开始构建东西的库。

希望这可能是一个解决方法。

答案 1 :(得分:1)

库中有一个类似bug的东西。当您创建包含许多列的表时,它将变得不可用。原因是,每个列都以其初始宽度创建。当您创建具有许多列的表(与所使用的方法无关:InsertTable,AddTable,InsertTableBeforeSelf等)并且它们的宽度总和超过文档宽度时 - 该表变得不可用。

我通过在循环中添加列并减小其宽度来解决此问题。 我的代码与此类似:

private void CreateSampleTable(DocX document)
{
    int rowsCount = 10;
    int columnsCount = 20;
    int columnWidth = 30;

    Table sampleTable = document.AddTable(rowsCount, 1);
    foreach (Row row in sampleTable.Rows)
    {
        row.Cells[0].Width = columnWidth;
    }

    for (int colIndex = 1; colIndex < columnsCount; colIndex++)
    {
        sampleTable.InsertColumn(colIndex);
        foreach (Row row in sampleTable.Rows)
        {
            row.Cells[colIndex].Width = columnWidth;
        }
    }

    Paragraph par = document.InsertParagraph();
    par.InsertTableBeforeSelf(sampleTable);
}