• asp.net 使用NPOI读取excel文件


    asp.net 使用NPOI读取excel文件内容

    NPOI下载地址:NPOI

    public class ExcelHelper
    {
        /// <summary>
        /// 读取Excel文件数据到DataSet,一个Sheet对应一个DataTable
        /// </summary>
        /// <param name="strExcelFilePath">Excel文件的物理路径</param>
        /// <returns></returns>
        public static DataSet GetDataFromExcel(string strExcelPhysicalPath, out string strError)
        {
            try
            {
                DataSet dsResult = new DataSet();
                strError = "";
    
                IWorkbook wbook = null;
                using (FileStream fs = new FileStream(strExcelPhysicalPath, FileMode.Open, FileAccess.Read))
                {
                    if (strExcelPhysicalPath.IndexOf(".xlsx") > 0)
                    {
                        wbook = new XSSFWorkbook(fs);
                    }
                    else
                    {
                        wbook = new HSSFWorkbook(fs);
                    }
                }
    
                for (int i = 0; i < wbook.NumberOfSheets; i++)
                {
                    ISheet wsheet = wbook.GetSheetAt(i);
                    if (wsheet == null) continue;
    
                    DataTable dtSheet = GetDataFromSheet(wsheet, out strError);
                    if (dtSheet != null)
                    {
                        dtSheet.TableName = wsheet.SheetName.Trim();
                        dsResult.Tables.Add(dtSheet);
                    }
                    else
                    {
                        dsResult = null;
                        break;
                    }
                }
                return dsResult;
            }
            catch (Exception ex)
            {
                strError = ex.Message.ToString();
                return null;
            }
        }
    
        private static DataTable GetDataFromSheet(ISheet wsheet, out string strError)
        {
            try
            {
                DataTable dtResult = new DataTable();
                strError = "";
    
                //取sheet最大列数
                int max_column = 0;
                for (int i = wsheet.FirstRowNum; i <= wsheet.LastRowNum; i++)
                {
                    IRow rsheet = wsheet.GetRow(i);
                    if (rsheet != null && rsheet.LastCellNum > max_column)
                    {
                        max_column = rsheet.LastCellNum;
                    }
                }
                //给DataTable添加列
                for (int i = 0; i < max_column; i++)
                {
                    dtResult.Columns.Add("A" + i.ToString());
                }
    
                for (int i = wsheet.FirstRowNum; i <= wsheet.LastRowNum; i++)
                {
                    DataRow dRow = dtResult.NewRow();
                    IRow rsheet = wsheet.GetRow(i);
    
                    if (rsheet == null) continue;
    
                    for (int j = rsheet.FirstCellNum; j < rsheet.LastCellNum; j++)
                    {
                        ICell csheet = rsheet.GetCell(j);
    
                        if (csheet == null) continue;
    
                        switch (csheet.CellType)
                        {
                            case CellType.Blank:
                                dRow[j] = "";
                                break;
                            case CellType.Boolean:
                                dRow[j] = csheet.BooleanCellValue;
                                break;
                            case CellType.Error:
                                dRow[j] = csheet.ErrorCellValue;
                                break;
                            case CellType.Formula:
                                try
                                {
                                    dRow[j] = csheet.NumericCellValue;
    
                                    short format1 = csheet.CellStyle.DataFormat;
                                    if (format1 == 177 || format1 == 178 || format1 == 188)
                                    {
                                        dRow[j] = csheet.NumericCellValue.ToString("#0.00");
                                    }
                                }
                                catch
                                {
                                    dRow[j] = csheet.StringCellValue.Trim();
                                }
                                break;
                            case CellType.Numeric:
                                try
                                {
                                    short format2 = csheet.CellStyle.DataFormat;
                                    if (format2 == 14 || format2 == 31 || format2 == 57 || format2 == 58)
                                    {
                                        dRow[j] = csheet.DateCellValue;
                                    }
                                    else
                                    {
                                        dRow[j] = csheet.NumericCellValue;
                                    }
                                    if (format2 == 177 || format2 == 178 || format2 == 188)
                                    {
                                        dRow[j] = csheet.NumericCellValue.ToString("#0.00");
                                    }
                                }
                                catch
                                {
                                    dRow[j] = csheet.StringCellValue.Trim();
                                }
                                break;
                            case CellType.String:
                                dRow[j] = csheet.StringCellValue.Trim();
                                break;
                            default:
                                dRow[j] = csheet.StringCellValue.Trim();
                                break;
                        }
                    }
    
                    dtResult.Rows.Add(dRow);
                }
                return dtResult;
            }
            catch (Exception ex)
            {
                strError = ex.Message.ToString();
                return null;
            }
        }
    }
  • 相关阅读:
    .NET Core 3.0之创建基于Consul的Configuration扩展组件
    .NET Core 3.0之深入源码理解Configuration(三)
    .NET Core 3.0之深入源码理解Configuration(二)
    .NET Core 3.0之深入源码理解Configuration(一)
    python __getattr__ & __getattribute__ 学习
    nginx+uwsgi+flask+supervisor 项目部署
    Read a large file with python
    MySQL 基础回顾(2020/06/14修改)
    Linux运维: Rsync同步数据(ubuntu16.04+windows10)
    斐波那契数列的5种python实现写法
  • 原文地址:https://www.cnblogs.com/laoq112/p/11903684.html
Copyright © 2020-2023  润新知