我正在使用ClosedXML创建一个包含一些数据的xlsx文件。在Excel工作表中,我有一个包含数据的表格。在表的列(而不是工作表的列)中,我希望指定数据类型。
/* This datatable is created and populated somewhere else in my program*/
Datatable dt = new Datatable();
ws.Cell(t.Position.Row, t.Position.Column).InsertTable(dt);
IXLTables allTables = ws.Tables;
var table = allTables.ElementAt(i);
int j = 1;
/* The options object hold the excel datatypes for each column*/
foreach (var c in option.Tables.ElementAt(i).Columns)
{
table.Column(j).DataType = c.Type;
j++;
}
i++;
数据类型是从一个options对象中找到并添加到foreach-loop中的,这在我的程序中如何工作可能并不重要。
问题是,当我向表中的列添加数据类型时,它包含表的标题。由于标头是"Text“,而我可能指定的值是Number,所以我得到了一个错误。有没有人知道如何让它忽略表的标题,而只是将数据类型添加到下面的列中?
提前谢谢。
发布于 2017-04-05 09:41:54
由于在Excel中设置数据类型可以在每个列的基础上工作,因此期望ClosedXml也是如此并不是不合理的。但是,正如您所发现的那样,它并不是这样工作的。我这样做的方法是定义一个范围,该范围选择除标题之外的整个列。我没有像您那样使用过表,但是下面的代码片段应该会给您一个方向。
IXLWorksheet sheet = wb.Worksheets.Add("Sheet1");
sheet.Cell(1, 1).InsertTable(dt);
foreach (var column in sheet.ColumnsUsed())
{
string columnLetter = column.ColumnLetter();
string rng = $"${columnLetter}2:columnLetter}sheet.RangeUsed().RowCount()}";
sheet.Range(rng).DataType = some data type;
}
https://stackoverflow.com/questions/42070855
复制相似问题