ac# コンソール アプリケーション内で NPOI ライブラリを使用して、Excel に情報を書き込んでいます。私が直面しているように見える問題は、コードが for ループ内から実行されないことです (同じコードを for ループから取り出すと、機能してスプレッドシートが更新されます)。
コードをステップ実行したので、ループでcreateRow、SetCellValueなどにヒットすることがわかっているので、ループの問題ではないことを知っています。ループでそれを実行したくないようです。面白いことに、ほとんど同じコード (C# ではなく VB.Net) が動作しますか?
サンプル 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# コードとは異なりますが、以前は 2 つが単なる標準ポートでした。
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
ドキュメンテーションは明確ではないため、ループの外側では機能するが、ループ内では機能しないというコードの正確な問題を理解することは明確ではありません。ループが機能していて、情報が渡されている場合は?