0

我在 ac# 控制台应用程序中使用 NPOI 库将一些信息写入 excel。我似乎面临的问题是代码不会从 aa for 循环中运行(如果我从 for 循环中取出相同的代码,它可以工作并更新电子表格)。

我已经单步执行了代码,所以我知道它在循环中命中了 createRow、SetCellValue 等,所以我知道它不是循环的问题,只是似乎不想在循环中执行它。有趣的是我有几乎相同的代码(VB.Net 不是 C#)可以工作吗?

示例 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

文档不清楚,因此当循环工作并且正在传递信息时,无法清楚地看到代码在循环之外工作但在其中没有什么问题?

4

3 回答 3

0

似乎我的循环在某个地方存在问题,不确定在哪里遇到断点并且值在那里,由于某种原因,库似乎不喜欢 foreach。

于 2012-06-14T16:00:06.233 回答
0

我不确定你在上面的代码中做了什么,你在 c# 示例中使用了一个名为“items”的变量,但我没有看到它在任何地方声明。

这是一个基本示例,说明如何使用名为“sheet1”的工作表读取 XLS 文件,其中包含 A 列中的值。

    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);
    }

确保正确处理流(Using 或 TryCatchFinally)。

于 2012-06-14T16:22:05.880 回答
0

尝试将 FileAccess 模式更改为“FileAccess.ReadWrite”

于 2013-01-30T05:44:14.733 回答