C# 将数据插入单个excel工作簿上的多个工作表

C# 将数据插入单个excel工作簿上的多个工作表,c#,excel,list,interop,C#,Excel,List,Interop,我正在研究一种方法,该方法使用以下代码将数据从两个不同的C#列表导出到单个工作簿中的两个excel工作表中 Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missi

我正在研究一种方法,该方法使用以下代码将数据从两个不同的C#列表导出到单个工作簿中的两个excel工作表中

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);



                Microsoft.Office.Interop.Excel._Worksheet worksheet1 = null;
                worksheet1 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets["Sheet1"];
                worksheet1 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.ActiveSheet;

                for (int i = 1; i < listExport.Count + 1; i++)
                {

                        worksheet1.Cells[i+1,1] = listExport[i - 1].time.ToString("HH:mm:ss");
                        worksheet1.Cells[i+1, 2] = listExport[i - 1].CC;
                        worksheet1.Cells[i+1, 3] = listExport[i - 1].term;                        

                }

                Microsoft.Office.Interop.Excel._Worksheet worksheet2 = null;
                worksheet2 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets["Sheet2"];
                worksheet2 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.ActiveSheet;

                for (int i = 1; i < AxiomSubSet.Count + 1; i++)
                {

                    worksheet2.Cells[i + 1, 1] = AxiomSubset[i - 1].time.ToString("HH:mm:ss");
                    worksheet2.Cells[i + 1, 2] = AxiomSubset[i - 1].CC;

                }

                string fileDestination = @"S:\Axiom Derivatives\Parser Project\axiom.xls";
                if (File.Exists(fileDestination))
                {
                    File.Delete(fileDestination);
                }

                workbook.SaveAs(fileDestination, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                workbook.Close(true, Type.Missing, Type.Missing);
                Process.Start(fileDestination);
                app.Quit();
Microsoft.Office.Interop.Excel.\u Application app=new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.\u工作簿=app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel.\u工作表1=null;
worksheet1=(Microsoft.Office.Interop.Excel._工作表)workbook.Sheets[“Sheet1”];
worksheet1=(Microsoft.Office.Interop.Excel.\u工作表)workbook.ActiveSheet;
for(int i=1;i
但是,当我运行上述方法时,第一个列表被成功处理,但当在下一行分配第二个工作表时,它抛出了错误
无效索引。(HRESULT的例外情况:0x8002000B(显示索引))

worksheet2==Microsoft.Office.Interop.Excel.\u工作表)workbook.Sheets[“Sheet2”]


这不是处理多张Excel工作表的方法吗?

第二张工作表可能不是Sheet2。 最好只使用索引

此外,您需要调用Activate以使工作表2成为活动工作表:

在第一张纸之前

worksheet1 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets[1];
workbook.Sheets[1].Activate(); 
在第二张纸之前

worksheet2 = (Microsoft.Office.Interop.Excel._Worksheet)workbook.Sheets[2];
workbook.Sheets[2].Activate(); 

你是不是碰巧在13号办公室工作?我认为默认情况下只有一个电子表格,因此您需要一种机制来检查
Sheet2
是否实际存在于
worksheet2=(Microsoft.Office.Interop.Excel.\u Worksheet)工作簿.Sheets[“Sheet2”]