Более 15 столбцов в таблице Novacode DocX.

Есть ли способ создать таблицу слов с более чем 15 столбцами с помощью Novacode DocX?

Если я создам новую таблицу с более чем 14 столбцами, таблица не появится. Я могу обойти это, выполнив что-то вроде этого:

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

А потом это:

docTable.InsertColumn();

Однако, если я попытаюсь сделать это более одного раза, чтобы создать таблицу с 16 или более столбцами, у меня будет та же проблема, когда таблица не появится.

Есть ли способ обойти это?


person yammerade    schedule 20.08.2015    source источник
comment
У ваших Tables одинаковое количество столбцов? или они часто меняются?   -  person Phillip    schedule 20.08.2015
comment
Они часто меняются — в них может быть от 5 до 17 столбцов.   -  person yammerade    schedule 26.08.2015
comment
Вы можете использовать приведенный ниже код с оператором if addCols > 14 только для создания таблицы. Затем создайте 3 разных таблицы в другом документе. template2.Tables[0] имеет 15, template2.Tables[1] имеет 16, а template2.Tables[2] имеет 17 столбцов. Затем используйте другой способ, которым вы делаете это, на чем-то меньшем, чем 15   -  person Phillip    schedule 26.08.2015


Ответы (2)


Вот мой способ обойти это. Это может не сработать, если вам нужно много разных таблиц со случайным большим количеством столбцов, потому что это потребует много работы.

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, в который вы вставляете Table. template2 содержит готовые Tables, которые состоят из 1 строки и имеют столько столбцов, сколько вам нужно. Таким образом, template2.Table[0] будет размером Table (1,15). Затем вы можете добавить больше Tables к template2 (вне кода, создав их в документе в Microsoft Word), увеличивая: template2.Table[1] будет размером Table (1,16). Единственная проблема заключается в том, что у вас есть много разных столбцов Tables, с которыми вам нужно работать. Novacode-dox не очень хорошая библиотека для создания вещей с нуля.

Надеюсь, это может быть обходным для вас.

person Phillip    schedule 20.08.2015

Что-то вроде бага в библиотеке. Когда вы создаете таблицу с большим количеством столбцов, она становится непригодной для использования. Причина в том, что каждый столбец создается со своей начальной шириной. При создании таблицы (независимо от используемого метода: 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);
}
person Daniel    schedule 19.02.2016