2017-02-13 12 views
1

ワークシートをワークブックで埋めているため、ワークブックに空のシートが表示される原因を特定できません。C#のブックから空のワークシートを削除する方法

  • は私が空のシート または空のシートが作成されている理由を特定し
  • を削除する必要があります。

これについての助けがあれば助かります。 MS相互運用機能を使用して 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

私はMaxRowMaxColのための任意のプロパティが表示されません。だからあなたの投稿コードを見て、私はそれらのプロパティが存在しないため、エラーが発生していると推測しています。あなたが探しているのはUsedRangeです。これは、いくつかの値を含むワークシート内のすべてのセルを含む四角形の範囲を返します。使用された範囲が1以下を返す場合、シートは空です。以下のコードはあなたが求めていることを達成します。お役に立てれば。

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

ありがとうJohnG、あなたが提案した解決策は動作します。しかし、空のシートを作成して削除するのではなく、シートをまったく作成しない方がよいでしょう。 foreachループに2つのワークシート(Worksheets.Add)を追加します。私はこれを達成する方法を知りたいのですが、ただ一つのワークシートを呼び出すだけです。 –

+0

foreach内の最初の行、 'if((table.Columns == 0)&&(table.Rows == 0)){continue; } ' – reasra

関連する問題