NPOI导入导出

NPOI导入导出

		/// <summary>
        /// 导出excle到指定文件处
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="list">数据集合</param>
        /// <param name="dic">字典:key为表头列值,value为对应数据上的属性名称;eg:"名称":"Name"</param>
        /// <param name="path">文件夹相对路径</param>
        /// <param name="fileName">保存的文件名</param>
        /// <returns></returns>
        public static async Task<string> SaveExcelToFile<T>(IEnumerable<T> list, Dictionary<string, string> dic, string path, string fileName = null) //where T : new()
        {
            var retpath = "";
            await Task.Run(() =>
            {
                var Ticks = DateTime.Now.Ticks;
                fileName = fileName ?? Ticks.ToString();
                var mainDir = Path.Combine(AppContext.BaseDirectory +  path);
                var mainPath = Path.Combine(mainDir, $"{fileName}.xls");
                retpath = Path.Combine(path, $"{fileName}.xls");
                //创建表格对象
                HSSFWorkbook hssfworkbook = new HSSFWorkbook();
                DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
                dsi.Company = "NPOI Team";
                SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
                si.Subject = "NPOI SDK Example";
                hssfworkbook.DocumentSummaryInformation = dsi;
                hssfworkbook.SummaryInformation = si;

                //创建表格单元格
                ISheet sheet = hssfworkbook.CreateSheet("Sheet1");
                sheet.CreateRow(0);

                //添加表头
                var h = 0;
                foreach (var i in dic)
                {
                    var value = i.Key;
                    sheet.GetRow(0).CreateCell(h).SetCellValue(value);
                    h++;
                    //sheet.GetRow(0).GetCell(a).CellStyle = style;
                }

                //添加行数据
                if (list != null && list.Count() > 0)
                {
                    var row = 1;
                    Type Ts = list.ElementAt(0).GetType();
                    foreach (var item in list)
                    {
                        sheet.CreateRow(row);

                        var col = 0;
                        foreach (var i in dic)
                        {
                            var value = i.Value;
                            var obj = Ts.GetProperty(i.Value);
                            var val = "";
                            if (obj != null)
                            {
                                val = obj.GetValue(item, null).ToString();
                            }
                            //赋值操作
                            sheet.GetRow(row).CreateCell(col).SetCellValue(val);
                            col++;
                        }

                        row++;
                    }
                }

                //判断文件夹存不存在,不存在新建
                if (!Directory.Exists(mainDir))
                {
                    Directory.CreateDirectory(mainDir);
                }

                FileStream file = new FileStream(mainPath, FileMode.Create);

                hssfworkbook.Write(file);
                file.Close();
                hssfworkbook.Clear();
            });
            return retpath;
        }
 		/// <summary>
        /// npoi导出excel内存流
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="list">数据集合</param>
        /// <param name="dic">字典:key为表头列值,value为对应数据上的属性名称;eg:"名称":"Name"</param>
        /// <returns></returns>
        public static async Task<MemoryStream> ExportExcel<T>(IEnumerable<T> list, Dictionary<string, string> dic, string fileName = null) //where T : new()
        {
            return await Task.Run(() =>
            {
                var Ticks = DateTime.Now.Ticks;
                fileName = fileName ?? Ticks.ToString();
                //创建表格对象
                HSSFWorkbook hssfworkbook = new HSSFWorkbook();
                DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
                dsi.Company = "NPOI Team";
                SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
                si.Subject = "NPOI SDK Example";
                hssfworkbook.DocumentSummaryInformation = dsi;
                hssfworkbook.SummaryInformation = si;

                //创建表格单元格
                ISheet sheet = hssfworkbook.CreateSheet("Sheet1");
                sheet.CreateRow(0);

                //添加表头
                var h = 0;
                foreach (var i in dic)
                {
                    var value = i.Key;
                    sheet.GetRow(0).CreateCell(h).SetCellValue(value);
                    h++;
                    //sheet.GetRow(0).GetCell(a).CellStyle = style;
                }

                //添加行数据
                if (list != null && list.Count() > 0)
                {
                    var row = 1;
                    Type Ts = list.ElementAt(0).GetType();
                    foreach (var item in list)
                    {
                        sheet.CreateRow(row);

                        var col = 0;
                        foreach (var i in dic)
                        {
                            var value = i.Value;
                            var obj = Ts.GetProperty(i.Value);
                            var val = "";
                            if (obj != null)
                            {
                                val = obj.GetValue(item, null).ToString();
                            }
                            //赋值操作
                            sheet.GetRow(row).CreateCell(col).SetCellValue(val);
                            col++;
                        }

                        row++;
                    }
                }
                MemoryStream stream = new MemoryStream();
                hssfworkbook.Write(stream);
                stream.Seek(0, SeekOrigin.Begin);
                return stream;
            });
            //return await File(stream, "application/vnd.ms-excel", $"{fileName}.xls");
        }

使用

		/// <summary>
        /// 导出
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public async Task<IActionResult> ExportReport(ListParameters model)
        {
			//列表数据
            var data = await _keyWordBaseRepository.ThroughTrainReportAsync(SellerId, model);
			//对应中文列名和属性
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("日期", "Date");
            dic.Add("点击量", "Click");
            dic.Add("点击率", "Expend");
            var ms = await FileController.ExportExcel<ThroughTrainActivityDto>(data, dic);
            return File(ms, "application/vnd.ms-excel", $"数据报告.xls");
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值