3

複数のシートを持つExcelレポートを作成しようとしています。これらの各シートには、SQLクエリの結果であるDataTableからのデータが含まれています。最初のワークシートは正しく作成されていますが、2番目のワークシートを作成できません。私は自分が間違っていることを理解していますが、新しいExcelワークブックをすべて作成せずに、以下のコードを使用してワークシートを追加する方法がわかりません。

ブックを作成してからシートを追加することを考えていました。しかし、私はそれをすべてクリックさせることができないようです。

これは私が試していることです:

static void Main(string[] args)
{
        Excel_FromDataTable(testingTable);
        Excel_FromDataTable(testingTable);
    }
}

private static void Excel_FromDataTable(DataTable dt)
{
    var excel = new Microsoft.Office.Interop.Excel.Application();
    var workbook = excel.Workbooks.Add(true);

    int iCol = 0;
    foreach (DataColumn c in dt.Columns)
    {
        iCol++;
        excel.Cells[1, iCol] = c.ColumnName;
    }

    int iRow = 0;
    foreach (DataRow r in dt.Rows)
    {
        iRow++;
        // add each row's cell data...
        iCol = 0;
        foreach (DataColumn c in dt.Columns)
        {
            iCol++;
            excel.Cells[iRow + 1, iCol] = r[c.ColumnName];
        }
    }
    // Global missing reference for objects we are not defining...
    object missing = System.Reflection.Missing.Value;
    // If wanting to Save the workbook...
    workbook.SaveAs(@"C:\MyExcelWorkBook2.xlsx");
    workbook.Close();
}
4

1 に答える 1

3

このことを考慮

Static void Main()
{

    var excel = new Microsoft.Office.Interop.Excel.Application();
    var workbook = excel.Workbooks.Add(true);

    AddExcelSheet(dt1, workbook);
    AddExcelSheet(dt2, workbook);

    workbook.SaveAs(@"C:\MyExcelWorkBook2.xlsx");
    workbook.Close();

}

private static void AddExcelSheet(DataTable dt, Workbook wb)
{    
    Excel.Sheets sheets = wb.Sheets;
    Excel.Worksheet newSheet = sheets.Add();
    int iCol = 0;
    foreach (DataColumn c in dt.Columns)
    {
        iCol++;
        newSheet.Cells[1, iCol] = c.ColumnName;
    }

    int iRow = 0;
    foreach (DataRow r in dt.Rows)
    {
        iRow++;
        // add each row's cell data...
        iCol = 0;
        foreach (DataColumn c in dt.Columns)
        {
            iCol++;
            newSheet.Cells[iRow + 1, iCol] = r[c.ColumnName];
        }
}
于 2012-10-19T19:00:22.783 に答える