2012-06-14 21 views
0

我正在使用c#控制檯應用程序中的NPOI庫將一些信息寫入excel。我似乎面臨的問題是代碼不會從一個for循環中運行(如果我從for循環中取出相同的代碼,它將工作並更新電子表格)。我已經通過了代碼,所以我知道它在循環中擊中了createRow,SetCellValue等,所以我知道它不是循環的問題,只是似乎並不想在循環中做到這一點。有趣的是我有幾乎相同的代碼(VB.Net不是C#),它的工作原理是什麼?NPOI庫在循環中使用時不會插入行/單元格數據

樣品C#代碼

 using (var fs = new FileStream(templateName, FileMode.Open, FileAccess.Read)) 
     { 
      var template = new HSSFWorkbook(fs, true); 
      var sheet = template.GetSheet(sheetName); 
      int rowCount = 1; 
      int colCount = 0; 

      colCount = 0; 

      NPOI.SS.UserModel.Row rowIn = null; 
      NPOI.SS.UserModel.Cell cellIn = null; 

      //foreach (var item in items) 
      for(int i = 0; i < items.Count; i++) 
      { 
       rowIn = sheet.CreateRow(i); 
       cellIn = rowIn.CreateCell(1); 
       cellIn.SetCellValue("A"); 
      } 

//....rest of the code to save the file 
     } 

以下VB.Net代碼的工作,這是從那裏我曾試圖去改變它,看看它是否會工作的C#代碼不同,但以前這兩個只是一個標準端口。

Using fs As New FileStream(Server.MapPath("/exporttemplates/tender-export-template.xls"), FileMode.Open, FileAccess.Read) 

      Dim templateWorkbook As New HSSFWorkbook(fs, True) 
      Dim sheet As HSSFSheet = templateWorkbook.GetSheet("Products") 

      Dim productsBids As List(Of TenderProductBid) = TenderProductBid.GetTenderProductBids(tbid.id) 
      Dim i As Integer = 1 

      For Each pb As TenderProductBid In productsBids 

       Dim rowIn As NPOI.SS.UserModel.Row = sheet.CreateRow(i) 
       rowIn.CreateCell(0).SetCellValue(pb.product.productName) 
       rowIn.CreateCell(1).SetCellValue(pb.quantity) 
       rowIn.CreateCell(2).SetCellValue(pb.bid) 

       i += 1 
      Next 

'....rest of the code to save the file 
End Using 

的文檔不清晰,所以它不是清楚地看到究竟是錯誤的代碼爲它工作在循環外,但沒有它,當迴路工作,將信息傳遞?

回答

0

似乎有一個問題與我的循環某處,不知道當斷點被擊中和價值在那裏,圖書館似乎並不喜歡foreach出於某種原因。

0

我不確定你在上面的代碼中做了什麼,你在c#中使用了一個名爲「items」的變量,但是我沒有看到它在任何地方聲明。

這裏是如何讀取了一個名爲「工作表Sheet1」工作表,全值的列A的XLS文件中的一個基本的例子

FileStream fs = new FileStream(templateName, FileMode.Open, FileAccess.Read); 
    HSSFWorkbook workbook = new HSSFWorkbook(fs); 
    Sheet sheet1 = workbook.GetSheet("Sheet1"); 

    List<string> items = new List<string>(); 

    for (int i = 1; i <= sheet1.LastRowNum; i++) 
    { 
     string item = sheet1.GetRow(i).GetCell(0).ToString(); 
     items.Add(item); 
    } 

請務必妥善處理信息流(使用或TryCatchFinally )。

0

嘗試將FileAccess模式更改爲「FileAccess.ReadWrite」

相關問題