You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:21