【问题标题】:Adding datatype to table columns with ClosedXML使用 ClosedXML 向表列添加数据类型
【发布时间】:2017-02-06 15:01:19
【问题描述】:

我正在使用 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 循环中找到并添加数据类型,这在我的程序中如何工作可能并不重要。

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

提前致谢。

【问题讨论】:

    标签: c# excel closedxml


    【解决方案1】:

    由于可以在 Excel 中按列设置数据类型,因此期望从 ClosedXml 中设置数据类型并非不合理。正如您发现的那样,它不是那样工作的。我这样做的方法是定义一个选择除标题之外的整个列的范围。我没有像你那样使用表格,但下面的 sn-p 应该会给你一个方向。

    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;
    }
    

    【讨论】:

    • 感谢您的回复!最终做了类似的事情,我最终手动删除了列标题并在下面的所有列单元格上添加了数据类型。
    猜你喜欢
    • 2016-02-19
    • 2015-11-04
    • 2021-07-12
    • 2011-09-24
    • 1970-01-01
    • 2012-12-29
    • 2016-05-31
    • 2011-02-03
    • 2017-07-21
    相关资源
    最近更新 更多