对于C#中的循环不循环

时间:2011-02-23 15:59:43

标签: c# asp.net for-loop

我遇到一个实际上没有循环的循环问题。我在下面发布了我的代码的简化版本。基本上,使用NPOI excel库,我有一个excel文件,在第一张和第二张表上有数据,所以我需要做一个循环来完成两张表。

以下是我到目前为止所做的工作,但这仅适用于第一张工作表然后退出。它无法增加变量w。正如您所看到的,在此代码中实现了其他循环,这些循环正常运行,因此我无法得到它。

这是漫长的一天,也许我错过了很简单的事情。我可能把它放错了或什么的。如果其他人能够发现我可能做错了什么,我将非常感激:)

public class SalesFileProcessor : ISalesProcessor
    {
        public List<FTPSalesRow> ProcessSalesFile(string filename)
        {
            try
            {

            using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read))
            {
                int numberOfSheets = 2;
//Loop through sheets - does not work
                for (int w = 0; w <= numberOfSheets; w++)
                {
                    HSSFWorkbook templateWorkbook = new HSSFWorkbook(fs);

                    HSSFSheet sheet = templateWorkbook.GetSheetAt(w);
                    HSSFRow row = null;


                    for (int i = 1; i <= sheet.LastRowNum; i++)
                    {
                        FTPSalesDetails t = null;
                        int currentColumn = 0;

                        try
                        {
                            ModelContainer ctn = new ModelContainer();

                            row = sheet.GetRow(i);

                            if (row == null)
                            {
                                continue;
                            }

                            t = new FTPSalesDetails
                            {
                                RowNumber = i,
                                InvoiceDate = GetCellValue(row.GetCell(0)),
                                CountrySoldIn = GetCellValue(row.GetCell(1)),
                                NetUnitsSold = GetCellValue(row.GetCell(2)),
                                Item = GetCellValue(row.GetCell(3)),
                                ProductCode = GetCellValue(row.GetCell(5)),
                            };

                            if (t.ProductCode == null && t.NetUnitsSold == null)
                            {
                                return null;
                            }

                            int Qty = int.Parse(t.NetUnitsSold);


                            for (int x = 0; x < Qty; x++)
                            {
                                ItemSale ts = new ItemSale
                                {
                                    ItemID = GetItemID(t.ProductCode),
                                    ManufacturerID = GetManufacturerID("Samsung"),
                                    DateSold = DateTime.Now,
                                };

                                ctn.AddToItemSales(ts);
                                ctn.SaveChanges();
                            }
                        }
                        catch (IndexOutOfRangeException) { }
                    }
                } //End Loop - the one that doesn't work
            }
        }
        catch (IOException exp)
        {
            throw new FTPSalesFileProcessingException("Could not open the Sales data file", exp);
        }
        catch (Exception exp)
        {
            throw new FTPSalesFileProcessingException("An unknown eror occured during processing the file", exp);
        }

        return null;
    }

4 个答案:

答案 0 :(得分:4)

 if (t.ProductCode == null && t.NetUnitsSold == null)
  {
      return null;
  }

我猜这会被击中,导致整个功能退出。如果您试图退出for循环的迭代,请尝试break;,或者像Mike M在评论中指出的那样继续。

答案 1 :(得分:1)

对于你说的,假设你的变量都没问题,那就是循环不是空的......你有没有检查过你在第一次迭代中是不是在点这行?

if (t.ProductCode == null && t.NetUnitsSold == null)
                            {
                                return null;
                            }

答案 2 :(得分:0)

查看代码,唯一明显的问题是:

HSSFSheet sheet = templateWorkbook.GetSheetAt(w);
HSSFRow row = null;

for (int i = 1; i <= sheet.LastRowNum; i++)

我猜那张sheet.LastRowNum等于0或1。

答案 3 :(得分:0)

可能抛出indexOutOfRangeException,因为你只有一次迭代,或者代替&lt; =你应该使用&lt;。工作表编号是否从零开始?