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

VS2022库存更新程序:将for循环转换为forEach循环需求

将GemBox Spreadsheet的for循环转换为forEach循环(库存更新程序)

需求背景

在VS2022中使用GemBox Spreadsheet开发库存更新程序,现有功能正常运行,需将文件更新逻辑中的for循环替换为forEach循环。

原for循环代码

public void updateFile(string filename, int range, ItemLine selectedItem, decimal outValue)
{
    var fullPath = $".\\Backend Files\\{filename}";
    SpreadsheetInfo.SetLicense("FREE -LIMITED-KEY");
    var workbook = ExcelFile.Load(fullPath, new CsvLoadOptions(CsvType.CommaDelimited));
    var worksheet = workbook.Worksheets[0];

    //foreach (var row in worksheet.Rows.Skip(1))
    //{
    //    foreach (var cell in row.AllocatedCells)
    //    {
    //        string updateValue = 
                
    //        if(cell.Value == int.TryParse((int)outValue, out int updateValue))
    //        {
    //        }
    //    }
    //}
    for (int i = 1; i <= range; i++)
    {
        var plan = worksheet.Rows[i].Cells[0].Value;
        var desc = worksheet.Rows[i].Cells[1].Value;
        var csvDescription = plan + " - " + desc;
        var platedescription = plan + " - ";
        if (selectedItem.ComboDescription == csvDescription)
        {
            worksheet.Rows[i].Cells[2].Value = selectedItem.Quantity;
        }
        if (selectedItem.plateDescription == platedescription)
        {
            worksheet.Rows[i].Cells[1].Value = selectedItem.Quantity;
        }
    }

    workbook.Save(fullPath, new CsvSaveOptions(CsvType.CommaDelimited));
}

参考的forEach实现示例

private static List<ItemLine> ReadFile(string fileName, string defaultValueDescription)
{
    string path = $".\\Backend Files\\{fileName}";
    SpreadsheetInfo.SetLicense("FREE -LIMITED-KEY");
    var workbook = ExcelFile.Load(path, new CsvLoadOptions(CsvType.CommaDelimited));
    var worksheet = workbook.Worksheets[0];

    var items = new List<ItemLine>();
    items.Add(new ItemLine { Description = defaultValueDescription, Quantity = 0 });

    foreach (var row in worksheet.Rows.Skip(1))
    {
        var cells = row.AllocatedCells;

        var il = new ItemLine();
        if (cells.Count == 2)
        {
            il.Description = cells[0].Value?.ToString() ?? "Description Not Found";
            il.Quantity = cells[1].IntValue;
        }
        else if (cells.Count >= 3)
        {
            il.Plan = cells[0].Value?.ToString() ?? "Plan Not Found";
            il.Description = cells[1].Value?.ToString() ?? "Description Not Found";
            il.Quantity = cells[2].IntValue;
        }

        items.Add(il);
    }
    return items;
}

转换后的forEach循环代码

public void updateFile(string filename, int range, ItemLine selectedItem, decimal outValue)
{
    var fullPath = $".\\Backend Files\\{filename}";
    SpreadsheetInfo.SetLicense("FREE -LIMITED-KEY");
    var workbook = ExcelFile.Load(fullPath, new CsvLoadOptions(CsvType.CommaDelimited));
    var worksheet = workbook.Worksheets[0];

    // 匹配原for循环的范围:跳过第0行,取range行数据
    foreach (var row in worksheet.Rows.Skip(1).Take(range))
    {
        var plan = row.Cells[0].Value;
        var desc = row.Cells[1].Value;
        var csvDescription = plan + " - " + desc;
        var platedescription = plan + " - ";
        
        if (selectedItem.ComboDescription == csvDescription)
        {
            row.Cells[2].Value = selectedItem.Quantity;
        }
        if (selectedItem.plateDescription == platedescription)
        {
            row.Cells[1].Value = selectedItem.Quantity;
        }
    }

    workbook.Save(fullPath, new CsvSaveOptions(CsvType.CommaDelimited));
}

转换说明

  • 使用worksheet.Rows.Skip(1).Take(range)精准匹配原for循环的遍历范围(从第1行到第range行)
  • 直接通过迭代变量row访问对应行的单元格,替代原代码中通过索引i获取行的方式
  • 完全保留原业务逻辑,仅修改行的遍历方式,确保功能一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:11:16