我想通过C#创建Excel工作簿后只添加一个工作表

时间:2011-07-17 08:51:46

标签: c# excel interop export-to-excel

代码是这个

        Excel.Application appC = new Excel.Application();  
        appC.Visible = true;              
        Excel.Workbook bookC = appC.Workbooks.Add(1);  
        Excel.Worksheet sheetC = bookC.Worksheets.Add();  
        sheetC.Name = "something";

命令Workbook.Add()采用一个参数来确定工作簿中将创建多少个工作表......对吗?

那么为什么我会得到2张纸...一个名为“某物”,一个名为“表2”? 我究竟做错了什么??

4 个答案:

答案 0 :(得分:3)

这是创建Excel应用程序对象并打开只有一张工作簿的代码并按您的意愿命名的代码:

Excel.Application appC = new Excel.Application();    
appC.SheetsInNewWorkbook = 1;       
appC.Visible = true;     
Excel.Workbook bookC = appC.Workbooks.Add();    
Excel.Worksheet sheetC = appC.Sheets.get_Item(1);   
sheetC.Name = "name-of-sheet";

答案 1 :(得分:2)

Workbooks.Add的参数不指定工作表数量。

请参阅Add方法的the MSDN description

您应该使用常量xlWBATWorksheet而不仅仅是“1”。

[我不在工作,没有Excel方便;可能是该常量的值实际为1,在这种情况下,这将不会产生(功能)差异。另一种方法是在创建工作簿之前设置SheetsInNewWorkbook属性,或者只是在创建工作簿后删除不需要的工作表。]

答案 2 :(得分:0)

我遇到了同样的问题。您需要添加如下表格:

//add 1 sheet
_workbookTemp.Sheets.Add(Type.Missing, Type.Missing, 1, Type.Missing);

//move this sheet to the last position
_workbookTemp.ActiveSheet.Move(After: _workbookTemp.Sheets[_workbookTemp.Sheets.Count]);

答案 3 :(得分:-1)

如果你正在使用vs 2010它是不同的你可以使用下面的代码将工作表添加到工作簿这我在VS 2010中尝试过这适用于我使用excel 2007工作簿项目模板

void AddSheet()
{
 OpenFileDialog excelSheetToOpen = new OpenFileDialog();
            excelSheetToOpen.Filter = "Excel 97- 2003 WorkBook (*.xls)| *.xls | Excel 2007 WorkBook (*.xlsx) | *.xlsx | All files (*.*)|*.*";
            excelSheetToOpen.FilterIndex = 3;
            excelSheetToOpen.Multiselect = false;

             Excel.Worksheet ws = Globals.ThisWorkbook.Worksheets.get_Item("RunningParameters");


             if (excelSheetToOpen.ShowDialog() == DialogResult.OK)
             {

                 Excel.Application excelApp = new Excel.Application();
                 String workbookPath = excelSheetToOpen.FileName;
                 Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath);
                 Excel.Sheets excelWorkBookSheets = excelWorkbook.Sheets;

                 Excel.Range _UsedRangeOftheWorkSheet;


                 foreach (Excel.Worksheet _Sheet in excelWorkBookSheets)
                 {
                     if (_Sheet.Name == ws.get_Range("B3").Value)
                     {
                         _Sheet.UsedRange.Copy();
                         _UsedRangeOftheWorkSheet = _Sheet.UsedRange;

                         Object [,] s = _UsedRangeOftheWorkSheet.Value;                        


                         Excel.Worksheet _WorkingSheet = Globals.ThisWorkbook.Sheets.Add(ws);
                         _WorkingSheet.Name = "WorkingSheet";
                         _WorkingSheet.Paste();



                     }
                 }  

             }


}

此代码直接从我的项目中提取,请根据需要获取代码,希望这有助于解决您的问题

谢谢