C# MVC Enumerable对象生成Excel文件(反射、泛型方法、字典)

该博客介绍了如何在C#中通过反射和泛型方法,利用Enumerable对象生成Excel文件。在`DownChange`方法中,从数据库获取数据,创建字典定义列名,然后调用`NPIOLISToExcel`方法生成Excel文件。此功能允许用户前端点击导出,下载包含特定数据的Excel附件,未来计划实现附件内容修改后更新数据库。
摘要由CSDN通过智能技术生成

项目场景:

提示:前端点击导出文件,生成Excel。Enumerable对象生成Excel文件(反射、泛型方法、字典)。


分析:

public ActionResult DownChange()
        {
            string filename = "模板.xls";
            string root = Server.MapPath("~/File/文件模板");
            string filePath = Path.Combine(root, filename);
            string sheetName = "Sheet1";
            List<RepositorySampleData> repositorySampleData = new List<RepositorySampleData>();
            repositorySampleData = _ISampleDataRepository.RepositorySampleDatas/*.Where(a => a.意见 != null && a.意见.Contains("不保留"))*/.Take(100).ToList();
            Dictionary<string, string> table = new Dictionary<string, string>();
            table.Add("SortNum", "序号");
            table.Add("状态", "状态");
            table.Add("库存","库位");
            table.Add("编号", "编号");
            table.Add("型号", "型号");
            NPIOLISToExcel(repositorySampleData, table, filePath, sheetName);

            string s = MimeMapping.GetMimeMapping(filename);
            return Content("/File/文件模板/" + filename);
        }
/// <summary>
        /// 生成Excel文件
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="list">数据列表</param>
        /// <param name="table">字典类型键值对</param>
        /// <param name="FilePath">生成文件路径</param>
        /// <param name="sheetName">生成Excel的sheet名称</param>
        public void NPIOLISToExcel<T>(List<T> list, Dictionary<string,string> table, string FilePath,string sheetName="") 
        {
            if (Path.GetExtension(FilePath).ToLower()==".xls".ToLower())
            {
                HSSFWorkbook wk = new HSSFWorkbook();//创建工作薄
                ISheet sheet = wk.CreateSheet(sheetName);
                //创建标题
                IRow row = sheet.CreateRow(0);//创建第0行
                var title = typeof(T).GetProperties();
                int num = 0;
                foreach (var ht in table)
                {
                    foreach (var item in title)
                    {
                        if (item.Name.ToString() == ht.Key.ToString())
                        {
                            ICell cell = row.CreateCell(num++);
                            cell.SetCellValue(ht.Value.ToString());
                        }
                    }
                }
                int j = 1;
                foreach (var item in list)
                {
                    int sort = 0;
                    row = sheet.CreateRow(j++);
                    foreach (var ht in table)
                    {
                        var temp = Convert.ToString(item.GetType().GetProperty(ht.Key.ToString()).GetValue(item, null));
                        ICell cell = row.CreateCell(sort++);
                        cell.SetCellValue((string)temp);
                    }
                }
                using (FileStream fs = System.IO.File.OpenWrite(FilePath)) //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
                {
                    wk.Write(fs);//向打开的这个xls文件中写入mySheet表并保存。
                }
            }
        }

方案:

提示:点击下载,导出table数据,生成Excel附件。对附件内容进行修改,然后提交附件,读取修改后的附件,进行数据库更新(此功能之后完成)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值