在 C# 中使用 NPOI 写入第二个工作表

问题描述 投票:0回答:1

我正在使用 NPOI 构建一个包含多个工作表的工作簿。 它很好地完成了第一张工作表并添加了第二张工作表,但不向其中写入数据。 当我设置断点并单步执行代码时,它似乎正在添加数据,但当我打开电子表格时,第二个工作表是空的。

这是我的代码:

foreach (string strServer in servers)
{
    ISheet excelSheet = workbook.CreateSheet(strServer);

    dtDatabases.Clear();
    columns.Clear();
    lbDatabases.Items.Clear();

    strConnectionDatabases = strConnectionDatabasesPart1 + strServer + strConnectionDatbasesPart2;

    using (SqlConnection con = new SqlConnection(strConnectionDatabases))
    {
        try
        {
            SqlDataAdapter adapter = new SqlDataAdapter("SELECT name FROM sys.databases", con);
            adapter.Fill(dtDatabases);

            foreach (DataRow row in dtDatabases.Rows)
            {
                lbDatabases.Items.Add(row[0].ToString());
            }
        }
        catch (Exception ex)
        {

        }
    }

    foreach (string strDatabaseName in lbDatabases.Items)
    {
        strConnectionTables = strConnectionTablesPart1 + strServer + strConnectionTablesPart2 + strDatabaseName + strConnectionTablesPart3;

        //ISheet excelSheet = workbook.CreateSheet(strDatabaseName);

        IRow row1 = excelSheet.CreateRow(intRow);

        row1.CreateCell(0).SetCellValue(strDatabaseName);

        int columnIndex = 1;
        intRow++;

        dtTables.Clear();
        dtTables.Columns.Clear();

        columns.Clear();
        //MessageBox.Show(strDatabaseName + " " + dtTables.Columns.ToString());

        using (SqlConnection con = new SqlConnection(strConnectionTables))
        {
            try
            {
                SqlDataAdapter adapter = new SqlDataAdapter("SELECT name FROM sys.tables", con);
                adapter.Fill(dtTables);

                //foreach (DataRow row in dtTables.Rows)
                //{
                //    lbTables.Items.Add(row[0].ToString());
                //}
            }
            catch (Exception ex)
            {

            }
        }

        //MessageBox.Show(strDatabaseName + " " + columns.Count().ToString());

        foreach (System.Data.DataColumn column in dtTables.Columns)
        {
            //MessageBox.Show(strDatabaseName + " " + column.ColumnName + " " + columnIndex.ToString());
            columns.Add(column.ColumnName);
            row1.CreateCell(columnIndex).SetCellValue(column.ColumnName);
            columnIndex++;
        }

        //MessageBox.Show(strDatabaseName + " " + dtTables.Rows.Count.ToString());

        foreach (DataRow row in dtTables.Rows)
        {
            //MessageBox.Show(strDatabaseName + " " + columnIndex.ToString() + " " + intRow);
            row1 = excelSheet.CreateRow(intRow);
            int cellIndex = 1;
            foreach (String col in columns)
            {
                row1.CreateCell(cellIndex).SetCellValue(row[col].ToString());
                //excelSheet.AutoSizeColumn(cellIndex);
                cellIndex++;
            }

            intRow++;
        }
    }
}

strFileName = @"\\janfs03\Public\DatabaseInventory.xls";

var fs = new FileStream(strFileName, FileMode.Create, FileAccess.ReadWrite);

using (fs)
{
    workbook.Write(fs);
    fs.Close();
}

任何帮助将不胜感激。 谢谢。

我尝试了上面的代码并期望填充第二张表。

c# npoi
1个回答
0
投票

我最终通过在 dtTables 的 foreach 循环后重新初始化 intRow 来修复它。

© www.soinside.com 2019 - 2024. All rights reserved.