2017-02-13 19 views
1

Я заполняю свою книгу рабочими листами, и я не могу понять, почему в моей книге появляются пустые листы.Как удалить пустые листы из книги в C#

  • нужно удалить пустые листы ИЛИ
  • Определите, почему пустые листы создаются.

Любая помощь по этому вопросу будет полезна. Output excel; Sheet1, Sheet3, Sheet5, Sheet7 are empty sheets

excelApp.DisplayAlerts = false; 
workBook = (Microsoft.Office.Interop.Excel._Workbook)(excelApp.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet)); 

//DataTable to Excel 
       foreach(DataTable table in dataSet.Tables) 
       { 
        workSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelApp.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
        workSheet.Name = table.TableName; 

        for (int i = 0; i < table.Columns.Count; i++) 
        { 
         workSheet.Cells[1, (i + 1)] = table.Columns[i].ColumnName; 
        } 

        for (int i = 0; i < table.Rows.Count; i++) 
        { 
         for (int k = 0; k < table.Columns.Count; k++) 
         { 
          workSheet.Cells[(i + 2), (k + 1)] = table.Rows[i][k]; 
         } 
        } 
        workBook.Worksheets.Add(workSheet); 
       } 

//Trying to delete empty sheets 
foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in workBook.Sheets) 
{ 
    excelApp.DisplayAlerts = false; 
    if (sheet.Cells.MaxRow == -1 && sheet.Cells.MaxColumn == -1) 
    { 
     sheet.Delete(); 
    } 
} 
+0

невозможно удалить пустую ячейку просто поставить некоторое окно предупреждения – jose

+0

я не хочу, чтобы удалить пустую ячейку, я хочу, чтобы удалить все пустые листы из книги. –

+0

, потому что вы добавляете их в начале И конец цикла '.Worksheets.Add' – Slai

ответ

0

Использование MS Interop Я не вижу каких-либо свойств для MaxRow и MaxCol. Поэтому, глядя на ваш опубликованный код, я предполагаю, что вы получаете ошибки, поскольку эти свойства не существуют. Это то, что вы ищете, это UsedRange. Это вернет диапазон прямоугольников, который будет содержать все ячейки на листе, содержащие некоторые значения. Если используемый диапазон возвращает 1 или меньше, тогда лист пуст. Код ниже выполнит то, что вы просите. Надеюсь это поможет.

foreach (Worksheet sheet in xlWorkbook.Worksheets) { 
    if (sheet.UsedRange.Count < 2) { 
    sheet.Delete(); 
    } 
} 
+0

Спасибо, JohnG, решение, которое вы предложили, работает. Но вместо того, чтобы создавать пустой лист, а затем удалять его, лучше не создавать его вообще. Я добавляю два листа (Worksheets.Add) в цикле foreach. Я хотел бы знать, как достичь этого, вызывая только один Worksheets.Add. –

+0

Первая строка внутри foreach, 'if ((table.Columns == 0) && (table.Rows == 0)) {продолжить; } ' – reasra

 Смежные вопросы

  • Нет связанных вопросов^_^