2017-02-13 6 views
1

Ich fülle meine Arbeitsmappe mit Arbeitsblättern und ich kann nicht herausfinden, warum leere Blätter in meiner Arbeitsmappe kommen.So löschen Sie leere Arbeitsblätter aus einer Arbeitsmappe in C#

  • brauche ich leere Blätter OR
  • fest, warum leere Blätter löschen sind, erstellt werden.

Jede Hilfe zu diesem Thema wäre hilfreich. 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

nicht möglich leere Zelle löschen nur einiges Warnfeld setzen – jose

+0

Ich will nicht leere Zelle löschen, ich will alle leere Arbeitsblatt aus der Arbeitsmappe löschen. –

+0

, weil Sie sie am Anfang hinzufügen und das Ende der Schleife '.Worksheets.Add' – Slai

Antwort

0

Mit MS Interop Ich sehe keine Eigenschaften für die MaxRow und MaxCol. Wenn ich mir Ihren Code ansehe, vermute ich, dass Sie Fehler bekommen, da diese Eigenschaften nicht existieren. Was Sie suchen, ist ein UsedRange. Dadurch wird ein Rechteckbereich zurückgegeben, der alle Zellen im Arbeitsblatt enthält, die einige Werte enthalten. Wenn der verwendete Bereich 1 oder weniger zurückgibt, ist das Blatt leer. Der folgende Code wird erreichen, was Sie fragen. Hoffe das hilft.

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

Vielen Dank JohnG, die von Ihnen vorgeschlagene Lösung funktioniert. Aber anstatt ein leeres Blatt zu erstellen und es dann zu löschen, wäre es besser, es überhaupt nicht zu erstellen. Ich füge zwei Arbeitsblätter (Worksheets.Add) in die foreach-Schleife. Ich würde gerne wissen, wie man das erreicht, indem man nur ein Worksheets.Add aufruft. –

+0

Erste Zeile innerhalb der foreach, 'if ((table.Columns == 0) && (table.Rows == 0)) {continue; } ' – reasra

Verwandte Themen