2017-06-21 513 views
0

我想提取數據表中的一些數據,並且想要發送電子郵件。 但是當我提取數據時,excel在提取的數據之間有很多空白。 未提取的數據使空白行。使用NPOI Excel工具刪除行c#

當我嘗試使用RemoveRow()函數時,它不起作用,仍然有一個空行。

private void Email() 
    { 
     //get the data from database 
     DataTable data = GetData(); 

     int maxLavel = Convert.ToInt32(data.Compute("max([AssignedID])", string.Empty)); 
     IWorkbook workbook; 
     workbook = new HSSFWorkbook(); 

     for (int Emp = 0; Emp < maxLavel; Emp++) 
     { 
     ISheet sheet1 = workbook.CreateSheet("Sheet 1"); 
      int num = 0; 

      //make a header row 
      IRow row1 = sheet1.CreateRow(0); 
      for (int j = 0; j < data.Columns.Count; j++) 
      { 

       ICell cell = row1.CreateCell(j); 

       String columnName = data.Columns[j].ToString(); 
       cell.SetCellValue(columnName); 
      } 
       //loops through data 
       for (int i = 0; i < data.Rows.Count; i++) 
       { 
        IRow row = sheet1.CreateRow(i + 1); 

        if (Emp == Convert.ToInt32(data.Rows[i][0])) 
        { 
         num++; 
         ICell cell = row.CreateCell(j); 
         for (int j = 0; j < data.Columns.Count; j++) 
         { 

          sheet1.AutoSizeColumn(j); //control cell width 
          String columnName = data.Columns[j].ToString(); 
          cell.SetCellValue(data.Rows[i][columnName].ToString()); 
         } 
        } 

        else ///here has problems 
        { 
          var row = sheet1.GetRow(i); 
          //sheet1.RemoveRow(row); 
          sheet1.ShiftRows(i + 1, sheet1.LastRowNum + 1, -1); 
        } 

       } 

       if (num != 0) 
       { 
       //send email 
       } 
     } 
    } 

回答

0

我不知道爲什麼你需要用不同的內容,而不是簡單地發送一個不同的文件重新發送相同的文件,但你能也許嘗試移動你的表的創建內部的for循環,並嘗試刪除整個表而不是?例如。這樣的事情:

private void Email() 
{ 
    //get the data from database 
    DataTable data = GetData(); 

    int maxLavel = Convert.ToInt32(data.Compute("max([AssignedID])", string.Empty)); 
    IWorkbook workbook; 
    workbook = new HSSFWorkbook(); 


    for (int Emp = 0; Emp < maxLavel; Emp++) 
    { 
     ISheet sheet1 = workbook.CreateSheet("Sheet 1"); 
     int num = 0; 

     //make a header row 
     IRow row1 = sheet1.CreateRow(0); 
     for (int j = 0; j < data.Columns.Count; j++) 
     { 

      ICell cell = row1.CreateCell(j); 

      String columnName = data.Columns[j].ToString(); 
      cell.SetCellValue(columnName); 
     } 
      //loops through data 
      for (int i = 0; i < data.Rows.Count; i++) 
      { 
       IRow row = sheet1.CreateRow(i + 1); 

       if (Emp == Convert.ToInt32(data.Rows[i][0])) 
       { 
        num++; 
        for (int j = 0; j < data.Columns.Count; j++) 
        { 
         ICell cell = row.CreateCell(j); 
         sheet1.AutoSizeColumn(j); //control cell width 
         String columnName = data.Columns[j].ToString(); 
         cell.SetCellValue(data.Rows[i][columnName].ToString()); 
        } 
       } 

      } 

      if (num != 0) 
      { 
      //send email 
      } 

     workbook.remove(sheet1); 
    } 
} 
+0

你能再次檢查我的問題嗎?我編輯它。我發現那不是問題。 – Scarlett

0

我想出來了..我不需要刪除該行。

IRow row = sheet1.CreateRow(i);

這應該改變。

 for (int i = 0; i < data.Rows.Count; i++) 
      { 
       if (Emp == Convert.ToInt32(data.Rows[i][0])) 
       { 
        IRow row = sheet1.CreateRow(row_num); 
        num++; row_num++; 
        for (int j = 0; j < data.Columns.Count; j++) 
        { 
         ICell cell = row.CreateCell(j); 
         sheet1.AutoSizeColumn(j); //control cell width 
         String columnName = data.Columns[j].ToString(); 
         cell.SetCellValue(data.Rows[i][columnName].ToString()); 
        } 
       } 

      }