有没有办法使用Novacode DocX创建超过15列的单词表?
如果我创建一个包含超过14列的新表格,则该表格不会显示。我可以通过这样做来解决这个问题:
int addCols = Math.Min(data.colCount, 14);
Table docTable = doc.InsertTable(data.rowCount, addCols);
然后是这个:
docTable.InsertColumn();
但是,如果我尝试不止一次地创建一个包含16个或更多列的表格,那么表格不会出现同样的问题。
有什么方法吗?
答案 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)。唯一的问题是,如果您需要使用许多不同数量的列Table
。 Tables
不是一个非常好的从头开始构建东西的库。
希望这可能是一个解决方法。
答案 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);
}