我的代码中的条件低于使用列号获取单元格值的条件。
但我想根据列名为单元格赋值,因为我从数组中指定的值,数组中的列名与Excel表格中的列标题的顺序不同。
if (row.GetCell(columnNumber) != null)
ICell cell = row.GetCell(columnNumber);
任何人都可以通过列名
告诉我如何获取单元格值答案 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....
哪个对我来说足够简单