zoukankan      html  css  js  c++  java
  • 使用 webapi+Aspose.Cells 导出execl 功能

    1.下载破解版Aspose.Cells ,正版 需要授权需要收费,使用的话会有水印。 Aspose.Cells相比NPOI 多了模版语法功能,还是很实用的。对于复杂表格来说。

    2.在webapi 项目中新建文件夹 复制 Aspose.Cells .dll ,并添加引用。

            /// <summary>
            /// 返回Excel文件流
            /// </summary>
            /// <param name="model">数据</param>
            /// <param name="templateFileName">模板文件,要全路径</param>
            /// <param name="sheetName">工作簿名称</param>
            /// <param name="outDesigner">工作簿名称</param>
            /// <returns></returns>
            public static byte[] OutDataTableToStream(DataTable dt, string templateFileName)
            {
                dt.TableName = "dt";
                string fileName = Path.GetFileName(templateFileName);
                Workbook wb = new Workbook(templateFileName);
                WorkbookDesigner designer = new WorkbookDesigner(wb);
                designer.SetDataSource(dt);
                designer.Process();
                return designer.Workbook.SaveToStream().ToArray();
            }

    传入一个datatble ,并输出 byte[] 

            /// <summary>
            /// 导出dt 
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
    
            public HttpResponseMessage ExportDtCsv(DataTable dt, string fileTemplateName)
            {
                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Forbidden);
    
                string templateFileName = HttpContext.Current.Server.MapPath("~/bin/template/" + fileTemplateName);
    
                byte[] bytes = Util.OutDataTableToStream(dt, templateFileName);
    
                string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
    
                result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new ByteArrayContent(bytes);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                result.Content.Headers.ContentDisposition.FileName = fileName;
    
                return result;
    
            }

     输出  HttpResponseMessage 前端调用即可。

    
    
    模版语法
    &= 是可以循环的,&=$ 是直接绑定变量的,不用循环的

    前端直接调用

    uploadFile (url, param) {
    let paramStr = Http.spliceParam(param);
    let curUrl = Http.baseUrl() + url + paramStr;
    window.open(curUrl);
    }

     就能下载了

  • 相关阅读:
    [整理]Win下好用的Markdown工具
    tcpip http socket
    [整理].net中的延迟初始化器
    [整理]ASP.NET WEB API 2学习
    [整理]ASP.NET MVC 5
    [转载]AngularJS 指令 用法
    [整理]HTML5 WebSocket
    [整理]CSS3 滤镜
    [整理]WebAPP开发的框架
    [整理]AngularJS移动端开发遇到的问题
  • 原文地址:https://www.cnblogs.com/FlowLight/p/10418090.html
Copyright © 2011-2022 走看看