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

C#控制台读取Excel文件时指定代码行未执行问题求助

问题:C#读取Excel时指定代码行未执行

我按照视频教程编写C#代码读取Excel文件,代码与教程一致,但运行时以下代码行未执行:

excelTable[rowIndex - 1, i] = Convert.ToDouble(list[i].Replace('.', ','));

完整代码片段:

double[,]? excelTable;
int totalRows = 0;
int totalColumns = 0;
ExcelPackage excelFile = new ExcelPackage(@"D:\telegram bot_d\Excel_Ankets.xlsx");
List();

async Task List()
{
    ExcelWorksheet worksheet = excelFile.Workbook.Worksheets[1];

    totalRows = worksheet.Dimension.End.Row;
    totalColumns = worksheet.Dimension.End.Column;
    excelTable = new double[totalRows, totalColumns];

    for (int rowIndex = 1; rowIndex <= totalRows; rowIndex++)
    {
        IEnumerable<string> row = worksheet.Cells[rowIndex, 1, rowIndex, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());
        List<string> list = row.ToList<string>();
        Console.WriteLine(list);
        for (int i = 0; i < list.Count; i++)
        {
            Console.WriteLine("1");
            excelTable[rowIndex - 1, i] = Convert.ToDouble(list[i].Replace('.', ','));
            Console.WriteLine("2"); 
        }
    }
    for (int i = 0; i < totalRows; i++)
    {
        for (int j = 0; j < totalColumns; j++)
        {
            Console.WriteLine(Convert.ToString(excelTable[i, j]));
        }
        Console.WriteLine("\n");
    }
    return;
}

后续计划通过Telegram Bot展示变量特定值并写入表格,已核对教程、搜索论坛仍未解决。


分析与解决方案

1. 异步方法未等待是核心问题

直接调用List();但未使用await,异步方法会在后台执行,程序主线程可能在List()执行完成前就退出,导致代码没跑完。

修复方式:

  • 确保入口方法为异步(比如Main方法改为async Task Main(),需C# 7.1及以上版本支持)
  • 调用时添加await:
await List();

2. 未捕获的转换异常导致代码中断

Convert.ToDouble可能因字符串格式不合法抛出异常,一旦抛出,当前循环直接中断,后续代码不执行,但无异常捕获无法看到报错。

修复方式:在转换代码块添加try-catch捕获异常,输出错误详情:

for (int i = 0; i < list.Count; i++)
{
    Console.WriteLine("1");
    try
    {
        // 注意:若系统区域用.作为小数点,替换成,反而会导致转换失败,需根据实际情况调整
        excelTable[rowIndex - 1, i] = Convert.ToDouble(list[i].Replace('.', ','));
        Console.WriteLine("2");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"第{rowIndex}行第{i+1}列转换失败:{ex.Message},内容为「{list[i]}」");
    }
}

3. 调试输出无效,无法排查内容问题

Console.WriteLine(list)输出的是List类型名称,看不到实际单元格内容,无法判断转换失败原因。

优化方式:修改输出语句,打印实际行内容:

Console.WriteLine($"第{rowIndex}行内容:{string.Join(" | ", list)}");

4. 额外检查点

  • 确认Excel对应单元格内容是可转换为double的数值,无空字符串、中文、特殊符号等无效内容
  • 检查系统区域小数点分隔符:若系统默认用.作为小数点,替换成,会导致转换失败,可去掉Replace('.', ','),或指定转换格式:
excelTable[rowIndex - 1, i] = Convert.ToDouble(list[i], new CultureInfo("ru-RU")); // 俄语区域用,做小数点

内容的提问来源于stack exchange,提问作者illuha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:35:32