如何使用NPOI C#将Excel读取到数据表

时间:2018-06-09 07:24:12

标签: c# excel npoi

我尝试使用 NPOI 将Excel读取到 DataTable 。所有工作正常但只有问题是如果我们在该行中有任何列单元格为空它不是在阅读。在Excel中我有4行(每行都有一些空值)。

Excel文件图片:enter image description here

在阅读Excel到数据表后:enter image description here

I want like this in data table

        private DataTable GetDataTableFromExcel(String Path)
        {
        XSSFWorkbook wb;
        XSSFSheet sh;
        String Sheet_name;
        using (var fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
        {
        wb = new XSSFWorkbook(fs);
        Sheet_name = wb.GetSheetAt(0).SheetName;  //get first sheet name
        }
        DataTable DT = new DataTable();
        DT.Rows.Clear();
        DT.Columns.Clear();
        // get sheet
        sh = (XSSFSheet)wb.GetSheet(Sheet_name);
        int i = 0;
        while (sh.GetRow(i) != null)
        {
         // add neccessary columns
         if (DT.Columns.Count < sh.GetRow(i).Cells.Count)
        {
        for (int j = 0; j < sh.GetRow(i).Cells.Count; j++)
        {
            DT.Columns.Add("", typeof(string));
        }
        }
        // add row
        DT.Rows.Add();

        // write row value
        for (int j = 0; j < sh.GetRow(i).Cells.Count; j++)
        {
            var cell = sh.GetRow(i).GetCell(j);
            DT.Rows[i][j] = sh.GetRow(i).GetCell(j);

        }
        i++;
        }
        return DT;
        }

请告诉我。

1 个答案:

答案 0 :(得分:0)

你可能需要尝试这条线。使用NPOI读取excel的可行代码。

// read the current row data
XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
// LastCellNum is the number of cells of current rows
int cellCount = headerRow.LastCellNum;
 // LastRowNum is the number of rows of current table
int rowCount = sheet.LastRowNum + 1; 
 bool isBlanKRow = false;
//Start reading data after first row(header row) of excel sheet.

for (int i = (sheet.FirstRowNum + 1); i < rowCount; i++)
{
    XSSFRow row = (XSSFRow)sheet.GetRow(i);
    DataRow dataRow = dt.NewRow();
    isBlanKRow = true;
    try
    {
        for (int j = row.FirstCellNum; j < cellCount; j++)
        {
            if (null != row.GetCell(j) && !string.IsNullOrEmpty(row.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(row.GetCell(j).ToString()))
            {
                dataRow[j] = row.GetCell(j).ToString();
                isBlanKRow = false;
            }
        }
    }
    catch (Exception Ex)
     { 

     }
     if (!isBlanKRow)
     {
         dt.Rows.Add(dataRow);
     }

}