迷恋自留地 发表于 2021-6-2 18:03

通过NPOI读取 excel指定Sheet 到DataTable

```csharp
public static DataTable ReadExcelToDataTable(string fileName, string sheetName = null, bool isFirstRowColumn = true)
      {

            //定义要返回的datatable对象
            DataTable data = new DataTable();
            //excel工作表
            ISheet sheet = null;
            //数据开始行(排除标题行)
            int startRow = 0;
            try
            {
                if (!File.Exists(fileName))
                {
                  return null;
                }
                //根据指定路径读取文件
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                //根据文件流创建excel数据结构
                IWorkbook workbook = WorkbookFactory.Create(fs);
                //IWorkbook workbook = new HSSFWorkbook(fs);
                //如果有指定工作表名称
                if (!string.IsNullOrEmpty(sheetName))
                {
                  sheet = workbook.GetSheet(sheetName);
                  //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
                  if (sheet == null)
                  {
                        return null;

                  }
                }
                else
                {
                  //如果没有指定的sheetName,则尝试获取第一个sheet
                  sheet = workbook.GetSheetAt(0);
                }
                if (sheet != null)
                {
                  int theRowNum = 0;
                  if (sheetName == "Lan FC样本比例")
                  {
                        theRowNum = 1;
                  }
                  else
                  {
                        theRowNum = 2;
                  }
                  IRow firstRow = sheet.GetRow(theRowNum);
                  if (firstRow == null)
                  {
                        return null;
                  }
                  //一行最后一个cell的编号 即总的列数
                  int cellCount = firstRow.LastCellNum;
                  //如果第一行是标题列名
                  if (isFirstRowColumn)
                  {
                        for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                        {
                            ICell cell = firstRow.GetCell(i);
                            if (cell != null)
                            {
                              string cellValue = cell.StringCellValue;
                              if (cellValue != null)
                              {
                                    DataColumn column = new DataColumn(cellValue);
                                    data.Columns.Add(column);
                              }
                            }
                        }

                  }
                  else
                  {
                        startRow = sheet.FirstRowNum;
                  }
                  startRow = sheet.FirstRowNum + theRowNum + 1;
                  //最后一列的标号
                  int rowCount = sheet.LastRowNum;
                  for (int i = startRow; i <= rowCount; ++i)
                  {
                        IRow row = sheet.GetRow(i);
                        if (row == null || row.GetCell(0) == null || string.IsNullOrEmpty(row.GetCell(0).ToString())) continue; //没有数据的行默认是null       
                        DataRow dataRow = data.NewRow();
                        for (int j = row.FirstCellNum; j < cellCount; ++j)
                        {
                            if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
                              dataRow = row.GetCell(j).ToString();
                        }
                        data.Rows.Add(dataRow);
                  }

                }

                return data;

            }
            catch (Exception ex)
            {
                throw ex;
            }
      }

```
https://blog.csdn.net/qq_40732336/article/details/117477273


https://hunji.xyz/index.php/archives/18.html

dlzc 发表于 2021-6-2 18:54

没明白。。。

静静想我1970 发表于 2021-6-2 21:51

这是发了一个C#代码啊{:1_925:}

huangjiahao123 发表于 2021-6-2 23:18


感谢分享

白兰度 发表于 2023-5-11 00:41


试一试隐藏进程如何
页: [1]
查看完整版本: 通过NPOI读取 excel指定Sheet 到DataTable