2017-02-13 66 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互操作我不明白的MaxRowMaxCol任何屬性。所以看着你的發佈代碼,我猜你正在得到錯誤,因爲這些屬性不存在。您正在尋找的是UsedRange。這將返回一個矩形範圍,該範圍將包含工作表中包含某些值的所有單元格。如果使用的範圍返回1或更少,則表單爲空。下面的代碼將完成你所要求的。希望這可以幫助。

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

謝謝JohnG,您建議的解決方案可行。但不是創建一個空白表然後刪除它,最好不要創建它。我在foreach循環中添加了兩個工作表(Worksheets.Add)。我想知道如何通過調用一個Worksheets.Add來實現這一點。 –

+0

foreach中的第一行,if((table.Columns == 0)&&(table.Rows == 0)){continue; }' – reasra

相關問題