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

C# 如何使用NPOI在c中使用列名获取excel单元格值,c#,excel,cell,npoi,C#,Excel,Cell,Npoi,我的代码中有以下条件,其中单元格值是通过使用列编号获得的 但我希望基于列名为单元格赋值,因为我从数组中赋值,数组中的列名顺序与Excel工作表中的列标题顺序不同 if (row.GetCell(columnNumber) != null) ICell cell = row.GetCell(columnNumber); 有人能告诉我如何使用列名获取单元格值吗?这是一个有点宽泛的问题,无法看到您正在处理的数据示例或您希望最终结果如何,但以下是一些让您开始的想法: 您可以为每一列指定单独

我的代码中有以下条件,其中单元格值是通过使用列编号获得的

但我希望基于列名为单元格赋值,因为我从数组中赋值,数组中的列名顺序与Excel工作表中的列标题顺序不同

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

有人能告诉我如何使用列名获取单元格值吗?这是一个有点宽泛的问题,无法看到您正在处理的数据示例或您希望最终结果如何,但以下是一些让您开始的想法:

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


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

我建议您丢弃NPOI,改用EPPlus。我浪费了3天时间用NPOI自动创建excel,只是发现要添加列,我必须手动移动每个单元格,并管理NPOI返回空对象的空单元格

在EPPlus中,就这么简单

worksheet.Cells["columnname"]

虽然这已经有一个月了,但在NPOI中,我也遇到了将列名转换为列位置以及将列名转换为列位置的问题

在这篇文章中找到了答案:使用NPOI.SS.Util.CellReference


CellReference允许您在两个方向上进行转换。您可以传入字符串单元格引用,例如AA1以获取位置,或者传入行和列以获取CellRefParts数组中的字符串。

在我的示例中,我需要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....

这对我来说已经足够简单了。

EPPlus更优越,但它不能处理*.xls文件。我们中的一些人被迫使用archaic.xls文件,并被要求使用NPOI。@bagofmilk您要么说服客户使用免费的替代openoffice、libreoffice、WPS office等,要么以非常小的费用使用任何第三方商业库,这些库为您完成所有枯燥的工作。与学习曲线、缺少文档和浪费在NPOI上的时间相比,您可以在一天内支付这一费用,并且可以永远使用它。是的,但我当前的问题是程序,特别是AutoCAD Electrical 2019。主要CAD软件开发人员的最新版本以*.xls格式提供数据,我无权让他们知道word的其余部分已从2003年开始转移。@bagofmilk尝试检查xls第三方库是否为您提供了这些数据。我记得我能够用其中一个的试用版制定出一个解决方案,该方案在商业项目中免费使用,但对您可以读取/导出的行数和页数有限制。或者买一个。或者,祝你学习NPOI好运,NPOI有着迄今为止我所见过的最糟糕的文档,并且仅仅依靠那些可怜的混蛋的皮肤生存,他们不得不从试错中举出例子。另外,我忘了,如果他们安装了直接指向Microsoft.Interop的Microsoft office pointAPI@Dave如果你提供你的代码而不是一般的错误报告?