如何使用NPOI在c#中使用列名来获得excel单元格值

时间:2017-10-02 15:48:05

标签: c# excel cell npoi

我的代码中的条件低于使用列号获取单元格值的条件。

但我想根据列名为单元格赋值,因为我从数组中指定的值,数组中的列名与Excel表格中的列标题的顺序不同。

if (row.GetCell(columnNumber) != null)
      ICell cell = row.GetCell(columnNumber);

任何人都可以通过列名

告诉我如何获取单元格值

4 个答案:

答案 0 :(得分:1)

我建议您删除NPOI并使用EPPlus。我花了3天时间用NPOI自动创建一些Excel,只是发现要添加一个列我必须手动移动每个单元格并管理NPOI返回空对象的空单元格。

在EPPlus中,它很简单

worksheet.Cells["columnname"]

答案 1 :(得分:0)

这是一个广泛的问题,但无法看到您正在使用的数据示例或您希望最终结果如何,但这里有一些想法可以帮助您入门:

您可以为每列添加单独的名称,并按特定顺序对这些列进行排序,从而在整个工作表中保持完整性。这可以通过读取第一行并将每列分配给变量来实现。

您可能会注意到哪些列包含哪些信息,并在数据结构中将您的信息订购为二进制搜索树或哈希,以组织数据并保留其结构。

答案 2 :(得分:0)

虽然这已经过了一个月,但我也遇到了在NPOI中将列名转换为列位置(反之亦然)的问题。

在这篇文章中找到答案:How to get the Excel Cell value by address (A1, A2) using NPOI使用NPOI.SS.Util.CellReference。

CellReference允许您双向转换。您可以传入一个字符串单元格引用(例如,“AA1”)来获取一个位置,或者传递一行和一列来获取该字符串(在CellRefParts数组中)。

答案 3 :(得分:0)

在我的情况下,我需要使用列名(在xls文件的第一行中)来更新数据库表。在@stevenh的提示下,我做到了:

                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

                rows.MoveNext();
                IRow r = (HSSFRow)rows.Current;
                int z = r.LastCellNum - 1;
                DataTable dt = new DataTable();

                for (int j = 0; j < z; j++)
                {
                    ICell cell = r.GetCell(j);
                    dt.Columns.Add(cell.StringCellValue);                    
                }

                rows.Reset();
                while (rows.MoveNext())
                {
                //... get the rest of the data....

哪个对我来说足够简单