我正在使用 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();
}
任何帮助将不胜感激。 谢谢。
我尝试了上面的代码并期望填充第二张表。
我最终通过在 dtTables 的 foreach 循环后重新初始化 intRow 来修复它。