NPOI List數據源 導出excel


 List數據源生成HSSFWorkbook通用方法:

public class WorkBook
    {
        public static HSSFWorkbook BuildSwitchData<T>(string SheetName, List<T> list, Dictionary<string, string> FiedNames)
        {
            HSSFWorkbook wb = new HSSFWorkbook();
            HSSFSheet sheet = (HSSFSheet)wb.CreateSheet(SheetName); //創建工作表
            sheet.CreateFreezePane(0, 1); //凍結列頭行
            HSSFRow row_Title = (HSSFRow)sheet.CreateRow(0); //創建列頭行
            row_Title.HeightInPoints = 30.5F; //設置列頭行高
            HSSFCellStyle cs_Title = (HSSFCellStyle)wb.CreateCellStyle(); //創建列頭樣式
            cs_Title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
            cs_Title.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
            HSSFFont cs_Title_Font = (HSSFFont)wb.CreateFont(); //創建字體
            cs_Title_Font.IsBold = true; //字體加粗
            cs_Title_Font.FontHeightInPoints = 14; //字體大小
            cs_Title.SetFont(cs_Title_Font); //將字體綁定到樣式
            #region 生成列頭
            int ii = 0;
            foreach (string key in FiedNames.Keys)
            {
                HSSFCell cell_Title = (HSSFCell)row_Title.CreateCell(ii); //創建單元格
                cell_Title.CellStyle = cs_Title; //將樣式綁定到單元格
                cell_Title.SetCellValue(key);
                sheet.SetColumnWidth(ii, 25 * 256);//設置列寬
                ii++;
            }

            #endregion
            //獲取 實體類 類型對象
            Type t = typeof(T); // model.GetType();
            //獲取 實體類 所有的 公有屬性
            List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
            //創建 實體屬性 字典集合
            Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
            //將 實體屬性 中要修改的屬性名 添加到 字典集合中 鍵:屬性名  值:屬性對象
            proInfos.ForEach(p =>
            {
                if (FiedNames.Values.Contains(p.Name))
                {
                    dictPros.Add(p.Name, p);
                }
            });

            HSSFCellStyle cs_Content = (HSSFCellStyle)wb.CreateCellStyle(); //創建列頭樣式
            cs_Content.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
            cs_Content.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
            for (int i = 0; i < list.Count; i++)
            {

                HSSFRow row_Content = (HSSFRow)sheet.CreateRow(i + 1); //創建行
                row_Content.HeightInPoints = 20;
                int jj = 0;
                foreach (string proName in FiedNames.Values)
                {
                    if (dictPros.ContainsKey(proName))
                    {
                        HSSFCell cell_Conent = (HSSFCell)row_Content.CreateCell(jj); //創建單元格
                        cell_Conent.CellStyle = cs_Content;

                        //如果存在,則取出要屬性對象
                        PropertyInfo proInfo = dictPros[proName];
                        //獲取對應屬性的值
                        object value = proInfo.GetValue(list[i], null); //object newValue = model.uName;
                        string cell_value = value == null ? "" : value.ToString();
                        cell_Conent.SetCellValue(cell_value);
                        jj++;
                    }
                }
            }
            return wb;

        }
    }

MVC控制器調用方法並以流的形式下載:

     public ActionResult ProcessRequest()
        {
            try
            {
                fangcanpyEntities db = new fangcanpyEntities();
                List<Models.order> list = db.order.AsNoTracking().ToList();//獲取List數據 可自行獲取
                Dictionary<string, string> FiedNames = new Dictionary<string, string>();
                FiedNames.Add("訂單編號", "order_no");
                FiedNames.Add("下單時間", "add_time");
                FiedNames.Add("會員編號", "uid");
                FiedNames.Add("收件人", "accept_name");
                FiedNames.Add("電話號碼", "mobile");
                FiedNames.Add("收件地址", "address");
                FiedNames.Add("訂單金額", "order_amount");
               
                string sExportFileName = ""; 
                HSSFWorkbook wb = null;
                wb = WorkBook.BuildSwitchData<Models.order>("訂單",list, FiedNames);//調用通用方法
                sExportFileName = "訂單" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";//設置下載文件的名稱
                MemoryStream stream = new MemoryStream();
                wb.Write(stream);
                var buf = stream.ToArray();
                return File(buf, "pplication/vnd.ms-excel", sExportFileName);

            }
            catch
            {
                return Content("");
            }
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM