C# 将DataTable导出到Excel工作表-创建时获取空行

C# 将DataTable导出到Excel工作表-创建时获取空行,c#,.net,winforms,excel,dataset,C#,.net,Winforms,Excel,Dataset,我有一个由6个表组成的数据集。当我将它们放入下面的方法中时,它在第一张表上完美地工作。但是,我注意到在第二个表中,第二行(列下)为空,然后显示表数据。这与表3相同,只是这次有两行为空。这就增加了空白行,因为每个剩余的表都是建立起来的。我验证了表本身没有这些空行。我希望这里的人会这么好,看看这个代码,让我知道这将是什么原因 public Excel.Application PrepareForExport(System.Data.DataSet ds) { object missing =

我有一个由6个表组成的数据集。当我将它们放入下面的方法中时,它在第一张表上完美地工作。但是,我注意到在第二个表中,第二行(列下)为空,然后显示表数据。这与表3相同,只是这次有两行为空。这就增加了空白行,因为每个剩余的表都是建立起来的。我验证了表本身没有这些空行。我希望这里的人会这么好,看看这个代码,让我知道这将是什么原因

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;
}
public Excel.Application PrepareForExport(System.Data.DataSet ds)
{
缺少对象=System.Reflection.missing.Value;
Excel.Application Excel=新建Excel.Application();
Excel.Workbook工作簿=Excel.Workbooks.Add(缺少);
int k=0;
int tableCount=6;
对于(int j=0;j
我认为问题出在int k变量和iRow上。
你设定

int k = 0;
在表中循环的外部。
然后在你的循环中

int iRow = 0 + k;
然后在循环结束时增加k。
对于第一个表,你得到了iRow=0;第二个表,iRow=1;第三个表,iRow=2。

请不要在标题前加上“C”之类的前缀。这就是标签的用途。另一种方法:是的!就这样!谢谢!:)