使用ClosedXML将数据类型添加到表列

时间:2017-02-06 15:01:19

标签: c# excel closedxml

我正在使用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++;

在一个选项对象的foreach循环中找到并添加了数据类型,这在我的程序中如何工作可能并不重要。

问题在于,当我向表中的列添加数据类型时,它包含表的标题。由于标题是“文本”,我可能指定的值是数字我得到一个错误。任何人都知道如何使它忽略表的标题,只需将数据类型添加到下面的列?

提前致谢。

1 个答案:

答案 0 :(得分:0)

由于设置数据类型可以在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;
}