NPOI读取单元格数据,NPOI导入Excel

本文讲述了在使用NPOI库从Excel文件导入数据时,如何处理日期格式不一致的问题,包括识别并转换日期单元格为MM/dd/yyyy格式,以及处理其他单元格类型如数字、空值和公式。
摘要由CSDN通过智能技术生成

在用NPOI导入excel时,单元格类型是Date,文字如11/13/2023,但读取后返回值是11-NOV-2023

月份变成了英文,采用如下方式解决。

public static DataTable ExcelImport(string strFileName)
        {
            DataTable dt = new DataTable();

            IWorkbook workbook = null;
            ISheet sheet = null;
            using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                if (strFileName.IndexOf(".xlsx") == -1)//2003
                {
                    workbook = new HSSFWorkbook(file);
                }
                else//2007
                {
                    workbook = new XSSFWorkbook(file);
                }
                sheet = workbook.GetSheetAt(0);
            }

            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

            IRow headerRow = sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;

            for (int j = 0; j < cellCount; j++)
            {
                ICell cell = headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }

            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                IRow row = sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();

                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    ICell cell = row.GetCell(j);
                    if (cell != null)
                    {
                        if (cell.CellType == CellType.Numeric)//NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
                        {
                            if (HSSFDateUtil.IsCellDateFormatted(cell))
                                dataRow[j] = cell.DateCellValue.ToString("MM/dd/yyyy");
                            else
                                dataRow[j] = cell.NumericCellValue;
                        }
                        else if (cell.CellType == CellType.Blank)//空数据类型
                        {
                            dataRow[j] = "";
                        }
                        else if (cell.CellType == CellType.Formula)//公式类型
                        {
                            HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(workbook);
                            dataRow[j] = eva.Evaluate(cell).StringValue;
                        }
                        else //其他类型都按字符串类型来处理
                        {
                            dataRow[j] = cell.StringCellValue;
                        }
                    }
                }

                dt.Rows.Add(dataRow);
            }
            return dt;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值