我遇到一个实际上没有循环的循环问题。我在下面发布了我的代码的简化版本。基本上,使用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;
}
答案 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;。工作表编号是否从零开始?