将DataTable导出到Excel表格 – 创build时获取空行

我有一个由6个表组成的数据集。 当我把它们放到我的方法下面,它在第一张桌子上完美地工作。 但是,我注意到在第二个表中的第二行(在列下)是空的,然后显示表数据。 这只是表3中的相同,这次只有两行是空白的。 随着每个剩余表格的build立,这增加了空行。 我证实,表本身没有这些空行。 我希望在这里有人会这样看待这个代码,让我知道这是什么原因。

public Excel.Application PrepareForExport(System.Data.DataSet ds) { object missing = System.Reflection.Missing.Value; Excel.Application excel = new Excel.Application(); Excel.Workbook workbook = excel.Workbooks.Add(missing); int k = 0; int tableCount = 6; for (int j = 0; j < tableCount; j++) { Excel.Worksheet newWorksheet; newWorksheet = (Excel.Worksheet)excel.Worksheets.Add(missing, missing, missing, missing); System.Data.DataTable dt = new System.Data.DataTable(); dt = ds.Tables[j]; // name sheet string tableName = string.Empty; switch (j) { case 0: tableName = "TEST1"; break; case 1: tableName = "TEST2"; break; case 2: tableName = "TEST3"; break; case 3: tableName = "TEST4"; break; case 4: tableName = "TEST5"; break; case 5: tableName = "TEST6"; break; default: tableName = "INVALID"; break; } newWorksheet.Name = tableName; int iCol = 0; foreach (DataColumn c in dt.Columns) { iCol++; excel.Cells[1, iCol] = c.ColumnName; } int iRow = 0 + k; foreach (DataRow r in dt.Rows) { iRow++; for (int i = 1; i < dt.Columns.Count + 1; i++) { if (iRow == 1) { // Add the header the first time through excel.Cells[iRow, i] = dt.Columns[i - 1].ColumnName; } if (r[1].ToString() != "") { excel.Cells[iRow + 1, i] = r[i - 1].ToString() + " - " + dt.Columns.Count; } } } k++; } return excel; } 

我认为这是你的int kvariables和iRow是问题。
你设置

 int k = 0; 

在循环表格之外。
然后在你的循环里面

 int iRow = 0 + k; 

然后你在循环结尾增加k。 所以对于第一个表,你有iRow = 0; 第二个表,iRow = 1; 第三个表,iRow = 2。