C# 将Excel.WorkSheets放入同一Excel.Workbook

C# 将Excel.WorkSheets放入同一Excel.Workbook,c#,excel,automation,C#,Excel,Automation,因此,在一个类中进行大量研究并使用下面的代码之后,我传递的项(一个数据表)将在Excel中打开。我有大约5张需要在同一本书中打开。下面的代码用于前2个。问题是它们都在新工作簿中打开--我需要它们都在同一工作簿中打开。但是,它们在每个新工作簿中的正确工作表上打开。我原以为一个简单的“如果”语句会奏效,但事实并非如此-- 任何关于如何将它们整合到一个工作簿中的输入都将非常感谢 Microsoft.Office.Interop.Excel.Application oExcel = new

因此,在一个类中进行大量研究并使用下面的代码之后,我传递的项(一个数据表)将在Excel中打开。我有大约5张需要在同一本书中打开。下面的代码用于前2个。问题是它们都在新工作簿中打开--我需要它们都在同一工作簿中打开。但是,它们在每个新工作簿中的正确工作表上打开。我原以为一个简单的“如果”语句会奏效,但事实并非如此-- 任何关于如何将它们整合到一个工作簿中的输入都将非常感谢

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;
            } 
Microsoft.Office.Interop.Excel.Application oExcel=new
Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks oBooks;
Microsoft.Office.Interop.Excel.Sheets;
Microsoft.Office.Interop.Excel.ook;
Microsoft.Office.Interop.Excel.Worksheet;
oExcel.Visible=true;
oExcel.DisplayAlerts=false;
oExcel.Application.wWorkbook=5;
oBooks=oExcel.工作簿;
oBook=(Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing));
oSheets=oBook.工作表;
如果(sheetName==“合并”)
{
oSheet=(Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_项(1);
oSheet.Name=sheetName;
object[,]arr=新对象[dt.Rows.Count,dt.Columns.Count];
for(int r=0;r
如果没有注释,您的代码有点太长,无法理解,但是如果您想在当前工作簿中添加新工作表,可以使用myWorkbook.Sheets.add()方法(其中myWorkbook是当前工作簿的引用)


对。我试图做的是传递我的返回,这些返回是我从SQL存储过程中提取的数据表,并将它们合并到一个工作簿中。如果在每个“if”语句中运行“myWorkBook.Sheets.Add()”则会添加一个空白工作表。这是非常有用的。我想我得回去同时运行它们,看看是否会有什么不同。Add()方法在工作簿中创建一个新工作表,并将其设置为活动工作表。一旦有了新工作表,就可以添加数据(通过在工作表上获取范围并在其中设置值)