簡體   English   中英

使用NPOI Excel工具C#刪除行

[英]remove the row using NPOI Excel tool c#

我想提取數據表中的一些數據,並希望發送電子郵件。 但是當我提取數據時,excel在提取的數據之間有很多空白。 未提取的數據為空白行。

當我嘗試使用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
                }
        }
    }

我不確定為什么您需要再次使用不同的內容重新發送同一文件,而不是簡單地發送不同的文件,但是您是否可以嘗試在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);
    }
}

我知道了..我不需要刪除該行。

IRow行= 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());
                    }
                }

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM