如何用C#读取Excel列并获取单元格及行相关信息
获取Excel单元格值及位置信息的C#实现
当然可以获取单元格的位置信息!你当前的代码是把单元格值转成了System.Array,这确实会丢失单元格的原始位置属性——不过我们有两种灵活的办法解决这个问题:
方法1:直接遍历Range的Cells(推荐)
放弃转成数组的操作,直接遍历目标Range里的每个单元格,这样就能直接访问单元格的Row、Column等原生属性,同时获取值:
Excel.Worksheet ws = (Excel.Worksheet)sheets.get_Item("Table1"); Range range = ws.UsedRange; // 定义目标范围:F3到F列最后一行 Excel.Range currentRangeCells = ws.get_Range("F3", "F" + range.Rows.Count); // 遍历每个单元格 foreach (Excel.Range cell in currentRangeCells) { if (cell.Value2 == null) continue; // 获取行号、列号和值 int rowNum = cell.Row; // int colNum = cell.Column; // 如果需要列信息也可以直接获取 Debug.Write($"{rowNum}: Value1 {cell.Value2}\r\n"); }
这种方法最直观,除了行号列号,你还能轻松获取单元格的格式、批注、公式等其他附加信息。
方法2:基于现有数组映射行号
如果你想保留当前用System.Array的逻辑,也可以通过起始行号+数组索引偏移来计算对应的Excel行号:
你的目标范围是从F3开始的,所以数组的第1个元素(索引i=1)对应Excel的第3行,第2个元素对应第4行,以此类推。对应的计算公式是:Excel行号 = 起始行号 + i - 1
修改你的代码如下:
Excel.Worksheet ws = (Excel.Worksheet)sheets.get_Item("Table1"); Range range = ws.UsedRange; int startRow = 3; // 你的起始行是F3 Excel.Range currentRangeCells = ws.get_Range("F" + startRow, "F" + range.Rows.Count); System.Array dataArray = (System.Array)currentRangeCells.Cells.Value2; if (dataArray == null) return; // 先判断数组是否为空 for (int i = 1; i <= dataArray.Length; i++) // 注意循环条件要包含最后一个元素 { var cellValue = dataArray.GetValue(i, 1); if (cellValue == null) continue; int excelRowNum = startRow + i - 1; Debug.Write($"{excelRowNum}: Value1 {cellValue}\r\n"); }
顺便修正了你原代码里的小细节:比如循环条件应该是i <= dataArray.Length,还有dataArrayValue1是笔误,统一用dataArray即可。
内容的提问来源于stack exchange,提问作者computermaus
相关产品推荐
相关产品推荐

