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
相关产品推荐
相关产品推荐

