Я хочу добавить только один лист после создания книги Excel через C # - PullRequest
1 голос
/ 17 июля 2011

код такой

        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 ]

3 голосов
/ 17 июля 2011

Это код для создания объекта приложения 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";
2 голосов
/ 17 июля 2011

Параметр для Workbooks.Add НЕ указывает количество листов.

См. описание MSDN метода Add.

Вам, вероятно, следует использовать константу xlWBATWorksheet, а не просто "1".

[Я не на работе и у меня под рукой нет Excel; может случиться так, что значение этой константы фактически равно 1, и в этом случае это не будет иметь (функциональной) разницы. Альтернативный вариант - установить свойство SheetsInNewWorkbook перед созданием рабочей книги или просто удалить ненужные листы после создания рабочей книги.]

0 голосов
/ 12 декабря 2013

Я столкнулся с той же проблемой.Вам нужно добавить лист как это:

//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]);
0 голосов
/ 17 июля 2011

если вы используете vs 2010, то он отличается, вы можете использовать приведенный ниже код, чтобы добавить рабочий лист в рабочую книгу. Я пробовал это в VS 2010, это работает для меня.

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();



                     }
                 }  

             }


}

Этот код извлечен непосредственно из моего проекта. Пожалуйста, добавьте код по мере необходимости, надеюсь, это поможет решить вашу проблему

спасибо

...