zoukankan      html  css  js  c++  java
  • .Net Core 使用 NPOI 导入Excel

    由于之前在网上查阅一些资料发现总是不能编译通过,不能正常使用,现把能正常使用的代码贴出:

    /// <summary>
       /// Excel导入帮助类
       /// </summary>
        public class ImportExcelUtil<T> where T : new()
        {
            //合法文件扩展名
            private static List<string> extName = new List<string>() { ".xls", ".xlsx" };
            /// <summary>
            /// 导入Excel内容读取到List<T>/// </summary>
            /// <param name="file">导入Execl文件</param>
            /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
            /// <returns>List<T></returns>
            public static List<T> InputExcel(IFormFile file, string sheetName = null)
            {
                //获取文件后缀名
                string type = Path.GetExtension(file.FileName);
                //判断是否导入合法文件
                if(!extName.Contains(type))
                {
                    return null;
                }
                //转成为文件流
                MemoryStream ms = new MemoryStream();
                file.CopyTo(ms);
                ms.Seek(0, SeekOrigin.Begin);
                //实例化T数组
                List<T> list = new List<T>();
                //获取数据
                list = InputExcel(ms, sheetName);
                return list;
            }
    
            /// <summary>
            /// 将Excel文件内容读取到List<T>/// </summary>
            /// <param name="fileName">文件完整路径名</param>
            /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
            /// <param name="isFirstRowColumn">第一行是否是DataTable的列名:true=是,false=否</param>
            /// <returns>List<T></returns>
            public static List<T> InputExcel(string fileName, string sheetName = null)
            {
                if (!File.Exists(fileName))
                {
                    return null;
                }
                //根据指定路径读取文件
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                //实例化T数组
                List<T> list = new List<T>();
                //获取数据
                list = InputExcel(fs, sheetName);
    
                return list;
            }
    
            /// <summary>
            /// 将Excel文件内容读取到List<T>/// </summary>
            /// <param name="fileStream">文件流</param>
            /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
            /// <returns>List<T></returns>
            private static List<T> InputExcel(Stream fileStream, string sheetName = null)
            {
                //创建Excel数据结构
                IWorkbook workbook = WorkbookFactory.Create(fileStream);
                //如果有指定工作表名称
                ISheet sheet = null;
                if (!string.IsNullOrEmpty(sheetName))
                {
                    sheet = workbook.GetSheet(sheetName);
                    //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
                    if (sheet == null)
                    {
                        sheet = workbook.GetSheetAt(0);
                    }
                }
                else
                {
                    //如果没有指定的sheetName,则尝试获取第一个sheet
                    sheet = workbook.GetSheetAt(0);
                }
                //实例化T数组
                List<T> list = new List<T>();
                if (sheet != null)
                {
                    //一行最后一个cell的编号 即总的列数
                    IRow cellNum = sheet.GetRow(0);
                    int num = cellNum.LastCellNum;
                    //获取泛型对象T的所有属性
                    var propertys = typeof(T).GetProperties();
                    //每行转换为单个T对象
                    for (int i = 1; i <= sheet.LastRowNum; i++)
                    {
                        IRow row = sheet.GetRow(i);
                        var obj = new T();
                        for (int j = 0; j < num; j++)
                        {
                            //没有数据的单元格都默认是null
                            ICell cell = row.GetCell(j);
                            if (cell != null)
                            {
                                var value = row.GetCell(j).ToString();
                                string str = (propertys[j].PropertyType).FullName;
                                if (str == "System.String")
                                {
                                    propertys[j].SetValue(obj, value, null);
                                }
                                else if (str == "System.DateTime")
                                {
                                    DateTime pdt = Convert.ToDateTime(value, CultureInfo.InvariantCulture);
                                    propertys[j].SetValue(obj, pdt, null);
                                }
                                else if (str == "System.Boolean")
                                {
                                    bool pb = Convert.ToBoolean(value);
                                    propertys[j].SetValue(obj, pb, null);
                                }
                                else if (str == "System.Int16")
                                {
                                    short pi16 = Convert.ToInt16(value);
                                    propertys[j].SetValue(obj, pi16, null);
                                }
                                else if (str == "System.Int32")
                                {
                                    int pi32 = Convert.ToInt32(value);
                                    propertys[j].SetValue(obj, pi32, null);
                                }
                                else if (str == "System.Int64")
                                {
                                    long pi64 = Convert.ToInt64(value);
                                    propertys[j].SetValue(obj, pi64, null);
                                }
                                else if (str == "System.Byte")
                                {
                                    byte pb = Convert.ToByte(value);
                                    propertys[j].SetValue(obj, pb, null);
                                }
                                else
                                {
                                    propertys[j].SetValue(obj, null, null);
                                }
                            }
                        }
                        list.Add(obj);
                    }
                }
                return list;
            }
    
        }
    View Code

    如使用有问题,请留言。希望能帮到你~~~

  • 相关阅读:
    PHP把下划线分隔命名的字符串与驼峰式命名互转
    Cocos2d-JS/Ajax用Protobuf与NodeJS/Java通信
    gulp 实现 js、css,img 合并和压缩
    转:入门Webpack,看这篇就够了
    微信开发教程:用户账号绑定到微信公众号的方法分享
    C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用
    php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密
    Windows下将nginx安装为服务运行
    转载:Centos7 从零编译配置Memcached
    转载:Centos7 从零编译Nginx+PHP+MySql 二
  • 原文地址:https://www.cnblogs.com/wuzhixiong/p/11991327.html
Copyright © 2011-2022 走看看