3

そのため、クラスで以下のコードを十分に調査して使用した後、渡したアイテム (DataTable) が Excel で開きます。同じ本で開く必要があるシートが約 5 枚あります。以下のコードは最初の 2 のコードです。問題は、それらがすべて新しいワークブックで開かれていることです。すべて同じワークブックで開く必要があります。ただし、新しいワークブックごとに正しいシートで開いています。単純な「if」ステートメントが機能すると思っていましたが、そうではありません。それらを 1 つの WorkBook に統合する方法についてのご意見をお待ちしております。

Microsoft.Office.Interop.Excel.Application oExcel = new               
Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks oBooks;
Microsoft.Office.Interop.Excel.Sheets oSheets;
Microsoft.Office.Interop.Excel.Workbook oBook;
Microsoft.Office.Interop.Excel.Worksheet oSheet;


oExcel.Visible = true;
oExcel.DisplayAlerts = false;
oExcel.Application.SheetsInNewWorkbook = 5;
oBooks = oExcel.Workbooks;

oBook = (Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing));
oSheets = oBook.Worksheets;

        if (sheetName == "Combined")
        {

            oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(1);
            oSheet.Name = sheetName;

            object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];


            for (int r = 0; r < dt.Rows.Count; r++)
            {
                DataRow dr = dt.Rows[r];
                for (int c = 0; c < dt.Columns.Count; c++)
                {
                    arr[r, c] = dr[c];
                }
            }


            Microsoft.Office.Interop.Excel.Range c1 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1, 1];
            Microsoft.Office.Interop.Excel.Range c2 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1 + dt.Rows.Count - 1, dt.Columns.Count];
            Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2);


            range.Value2 = arr;
         }
         else  if (sheetName == "Auto") 
            {

            oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(2);
            oSheet.Name = sheetName;
            object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];


            for (int r = 0; r < dt.Rows.Count; r++)
            {
                DataRow dr = dt.Rows[r];
                for (int c = 0; c < dt.Columns.Count; c++)
                {
                    arr[r, c] = dr[c];
                }
            }


            Microsoft.Office.Interop.Excel.Range c1 =       
            (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1, 1];
            Microsoft.Office.Interop.Excel.Range c2 = 
            (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1 + dt.Rows.Count - 1,  
            dt.Columns.Count];
            Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2);


            range.Value2 = arr;
            } 
4

1 に答える 1

0

コードは長すぎてコメントなしでは理解できませんが、現在のワークブック内に新しいシートを追加する場合は、myWorkbook.Sheets.Add() メソッドがあります (myWorkbook は現在のワークブックへの参照です)。

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.sheets.add(v=office.14).aspx

于 2012-11-30T14:35:50.773 に答える