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