我在代码中有以下情况,其中单元格的值是通过列号获取的。
但是我想根据列名分配单元格的值,因为我从一个数组中分配值,而该数组中的列名与Excel表格中的列标题顺序不同。
if (row.GetCell(columnNumber) != null)
ICell cell = row.GetCell(columnNumber);
请问有什么方法可以通过列名获取单元格的值吗?
在我的情况下,我需要使用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....
对我来说,这很简单。
worksheet.Cells["columnname"]
Dictionary<string, int> indices =
headersRow.Cells
.Select(x => new { x.StringCellValue, x.ColumnIndex })
.ToDictionary(x => x.StringCellValue, x => x.ColumnIndex);
for (var rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
var hasSuchHeader = indices.TryGetValue(name, out int cellIndex);
if (hasSuchHeader)
{
var cell = row.GetCell(cellIndex);
}
}
这是一个比较宽泛的问题,没有看到你所处理的数据示例或者你想要的最终结果,但是以下是一些启发性的想法:
你可以为每一列设置单独的指定,并按照特定顺序对这些列进行排序,以保持整个表格的完整性。这可以通过读取第一行并将每一列分配给一个变量来实现。
或者
你可以记录哪些列包含什么信息,并按照数据结构(如二叉搜索树或哈希)的顺序对信息进行排序,以组织数据并保留其结构。