下载固定格式的Excel

需求:现有个需求,需要导出需求方要求的格式的Excel报表。(包含固定的一个表头和多个表体)

方案:将需求方要求的Excel作为模板存放在项目的某个位置,将需要的数据读出之后作为一个对象,通过数据字典的形式传递过去。Excel模板通过 表头{name}, 表体For{body}形式接收数据。然后设置导出文件的存放位置。

注意:(1)NPOI版本是2.4,(2).webconfig appsetting里有配置 ,(3)模板Excel中单元格读出数据要匹配,表头和表体要注意。(4)Excel单元格要占位,可以先复制,然后再删除 或者直接打上边框。否则有多条数据的话,单元格没有占位过,就会报错。会提示未将对象引用到实例(5)文件保存位置要注意

1、前端页面代码,点击按钮,下载BOM固定格式的Excel

   <button id="btn_ExcelDaochu_bomshuju" type="button" class="btn btn-app btn-success btn-xs">
      <div class="center spinner-preview" id="spinner-preview-ExcelDaochu-bomshuju"></div>
      <i class="ace-icon fa fa-download bigger-140"></i>
      <span>BOM</span>
   </button>
//导出BOM报表
      $("#btn_ExcelDaochu_bomshuju").click(function () {
             var Guanlianhao = $("#Shenpiliuchengxinxi_Guanlianhao").val();
              $.post("@Url.Action("DaoChuBomExcel")", { Guanlianhao: Guanlianhao }, function (data) {
                if (data.isSucced) {
                     downLoad("/Bomgyshenpi/Download/" + data.wenjianjia + "/" + data.fileName, data.fileName);
                    }
                    else {
                        alert(data.errorMessage);
                    }
                })
            });

2、后端方法

        [HttpPost]
        public JsonResult DaoChuBomExcel(BomSearchDto searchDto)
        {
            //表体数据
            List<tbbg_bom> bomlist = _bomXinXiYeWu.GetFenYeList(searchDto).List;
            if (bomlist == null || bomlist.Count <= 0)
                return Json(new { isSucced = false, errorMessage = "没有数据!" });
           
            //表头数据
            var  bomguanlianhao = bomlist.Select(x => x.Guanlianhao).FirstOrDefault();
            var shenpiliuchengList = _shenPiLiuChengYeWu.GetList(new ShenPiLiuChengSearchDto() { Guanlianhao = bomguanlianhao });

            //创建表头对象字典
            var header = shenpiliuchengList.List.First();//数据为null时报错
            
            //把表体里需要导出的数据字段映射到body里
            var body = bomlist.Select(x => new
            {
                Id=x.Id,
                Name=x.Wuliaomingcheng,
                Guige = x.Guige,
                Danwei = x.Danwei,
                Wuliaodanhao = x.Wuliaodanhao,
                Picitouliao= header.Chanchuliang*x.Wuliaodanhao,
                Beizhu = x.BOMbeizhu

            });
            Dictionary<string, object> dic = new Dictionary<string, object>
            {
                {"Biaodan",header.Biaodanmingcheng},
                {"Faqiren",header.Faqirenxingming},
                {"Bumen",header.Bumensub},             
                {"Zhuangtai",header.ZhuangTaiMing},
                {"Name",header.Chanpinmingcheng },
                {"Chanchuliang",header.Chanchuliang },
                {"Gongyiluxianname",header.Gongyiluxianname },
                {"Riqi",header.Riqi },
                {"Banbenhao",header.Banbenhao },
                {"body",body }//表体
            };

            return ExportBomExcel(dic);
        }
  public JsonResult ExportBomExcel(IDictionary<string,object> dic)
        {
            ExcelManager manager = new ExcelManager();
            var savePath = @"E:\bom.xls";//新生成文件保存路径(之前的会被覆盖)
            try
            {

                manager.TmplFileName = Server.MapPath("BOM.xls"); //模板文件
                manager.CreateNewWorkbook(dic);//复制模板文件并将dic传入
                manager.Save(savePath);//保存路径
            }

           catch (Exception ex)
            {
                return Json(new { isSucced = false, errorMessage = ex.Message });
            }

            return Json(new { isSucced = true});
        }

3、webconfig   <appSettings>  </appSettings> 配置

  <add key="NormalPlaceHolderRegex" value="" />
    <add key="ListPlaceHolderRegex" value="" />

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <add key="oasystem" value="https://office.enzymaster.com:8443/oa201809/" />
    <add key="webhost" value="http://localhost:64836/" />
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

  
    <add key="NormalPlaceHolderRegex" value="" />
    <add key="ListPlaceHolderRegex" value="" />
  </appSettings>

4、模板存放位置,目前老版本Excel即.xls可以,但是.xlsx文件作为模板 导出的时候会有问题。

 5、模板文件获取数据

注意:body里有多条数据的话,Excel模板里要占位,否则会报错。会提示未将对象引用到实例。最直接的办法是给Excel模板打上边框来占位。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值