精华内容
下载资源
问答
  • web导出按钮导出excel文件
    2019-12-17 11:28:25

    总的来说,两种方法:服务器端生成和浏览器端生成。

    服务器端生成就是:根据用户请求,获取相应的数据,使用poi/jxl, jacob/jawin+excel,或是用数据拼html的table或是cvs纯文本的数据格式等。然后按.xls或是.cvs格式的文件的形式返回给用户,指定Content-Type:application/vnd.ms-excel ,浏览器就会提示要下载的文件是excel文件。

    poi/jxl, jacob/jawin生成的是excel的biff格式。html/csv的是文本格式,不另存为excel文件,很多excel功能是用不了的。jacob/jawin需要服务器端是windows系统,且安装了excel2000以上版本。poi/jxl和html/csv方式的话,服务器端可以跨平台。

    浏览器端生成excel文件还没有特别完善的方案,这是因为js无法处理二进制。大概有以下几个方案,各有利弊。

    1. activex方式:使用js/vbs调用excel对象,http://setting.iteye.com/blog/219302,有个extjs的gridpanel导出为excel的例子。 (ie+excel)

    2. ie命令方式:将html或是csv输出到open的window,然后使用execCommand的saveas命令,存为csv或xls。 (ie6 only)

    3. 服务器端中转方式:将html的table或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。 (all)

    4. data协议方式:对于支持data协议的浏览器,可以将html或是csv先用js base64处理,然后前缀data:application/vnd.ms-excel;base64,,即可使浏览器将其中的数据当做excel来处理,浏览器将提示下载或打开excel文件,可惜的是ie不支持。extjs的官网有一个grid的plugin,实现导出xhtml格式的伪excel文件,就是这么做的。 (except IE)

    浏览器端只有第一种方案导出的是真正的biff格式的excel文件,其他方式都是文本格式。activex方式只能在windows平台的ie浏览器使用,而且需要降低ie的安全性,所以应用比较有限。复杂的excel文件,还是在服务器端用poi/jxl生成excel比较好。如果浏览器固定位ie6,浏览器端方式2是最好的方案。如果要降低服务器端cpu的计算压力,客户端方案3可行,而且跨平台(比poi/jxl方式少了取数和生成二进制文件)。如果是非ie浏览器,方案4也不失为一种好方法。

     

    ps: 还有一个方案,就是让安装了ie和excel的用户在网页上右键,点击“导出到 Microsoft Excel”,然后可以选择要导出的table区域,点“导入”按钮,完成导入。

    js:页面导出excel:

     var idTmr;

            function  getExplorer() {

                var explorer = window.navigator.userAgent ;

                //ie 

                if (explorer.indexOf("MSIE") >= 0) {

                    return 'ie';

                }

                //firefox 

                else if (explorer.indexOf("Firefox") >= 0) {

                    return 'Firefox';

                }

                //Chrome

                else if(explorer.indexOf("Chrome") >= 0){

                    return 'Chrome';

                }

                //Opera

                else if(explorer.indexOf("Opera") >= 0){

                    return 'Opera';

                }

                //Safari

                else if(explorer.indexOf("Safari") >= 0){

                    return 'Safari';

                }

            }

            

            function method1(tableid) {//整个表格拷贝到EXCEL中

                if(getExplorer()=='ie')

                {

                    var curTbl = document.getElementById(tableid);

                    var oXL = new ActiveXObject("Excel.Application");

                    

                    //创建AX对象excel 

                    var oWB = oXL.Workbooks.Add();

                    //获取workbook对象 

                    var xlsheet = oWB.Worksheets(1);

                    //激活当前sheet 

                    var sel = document.body.createTextRange();

                    sel.moveToElementText(curTbl);

                    //把表格中的内容移到TextRange中 

                    sel.select();

                    //全选TextRange中内容 

                    sel.execCommand("Copy");

                    //复制TextRange中内容  

                    xlsheet.Paste();

                    //粘贴到活动的EXCEL中       

                    oXL.Visible = true;

                    //设置excel可见属性

                    try {

                        var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");

                    } catch (e) {

                        print("Nested catch caught " + e);

                    } finally {

                        oWB.SaveAs(fname);

                        oWB.Close(savechanges = false);

                        //xls.visible = false;

                        oXL.Quit();

                        oXL = null;

                        //结束excel进程,退出完成

                        //window.setInterval("Cleanup();",1);

                        idTmr = window.setInterval("Cleanup();", 1);

                    }

                    

                }

                else

                {

                    tableToExcel(tableid)

                }

            }

            function Cleanup() {

                window.clearInterval(idTmr);

                CollectGarbage();

            }

            var tableToExcel = (function() {

                  var uri = 'data:application/vnd.ms-excel;base64,',

                  template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">'

                  +'<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>'

                  +'<x:ExcelWorksheet><x:Name>{worksheet}</x:Name>'

                  +'<x:WorksheetOptions><x:DisplayGridlines/>'

                  +'</x:WorksheetOptions></x:ExcelWorksheet>'

                  +'</x:ExcelWorksheets></x:ExcelWorkbook></xml>'

                  +'<![endif]--></head>'

                  +'<body><table>{table}</table></body></html>',

                    base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },

                    format = function(s, c) {

                        return s.replace(/{(\w+)}/g,

                        function(m, p) { return c[p]; }) }

                    return function(table, name) {

                    if (!table.nodeType) table = document.getElementById(table)

                    var htmlVlue=$("#"+gridId).find(".x-grid3-viewport").html();

                    //htmlVlue=htmlVlue.replace('','');

                    //var a='<img class="x-grid3-sort-icon" src="/SMP/pub/lib/Ext3/resources/images/default/s.gif" alt="">';

                    

                    // htmlVlue=htmlVlue.replace($(".x-grid3-sort-icon").html(),'');

                    var ctx = {worksheet: name || '营业部监控', table:htmlVlue }

                    window.location.href = uri + base64(format(template, ctx))

                  }

                })()

    更多相关内容
  • 一、JSP文件 . . toolbar ="#toolbar" pagination ="true" pageList ="[5,10,15]" pageSize ="15" >  .  Name ...  tr > toolbar” > . exportExcel()” > Excel

    一、JSP 文件

    < div id="content" >

       <table id="dg" title="Menu Hits" class="easyui-datagrid" style="height:600px" url="${ctx}/json/getName.action"

           toolbar ="#toolbar" pagination ="true" pageList ="[5,10,15]" pageSize ="15" > 

    < thead>

        <tr> <th field ="name" width="100">Name</th >  ... </tr>

    </thead >

    <div id=”toolbar”>

        <a href=”class=”easyui-linkbutton” iconCls=”icon-save” plain=”true” onClick=”exportExcel()”> Excel </a>

    </div> 

    <script type=”text/javascript”> 

        function exportExcel(){

           var date=$(“#date”).datebox(“getValue”);

           var text=$(“#txtId”).val();

           location.href = “exportExcel.action?date=”+date+”&text=”+text;

    </script>

    </div>


    二、struts 文件

    <action name=”exportExcel” class=”exportAction” method=”exportExcel”>

      <result name=”success” type=”stream” >

        <param name=”contentType”>application/vnd.ms-excel</param>

        <param name=”inputName”> excelStream</param>

        <param name=”contentDispostion”>attachment;filename=”$(fileName).xls”</param>

        <param name=”bufferSize”>1024</param>

     </result > 

    </action> 


    三、java 文件

      public String exportExcel() {

        searchInput = new SysName();        // SysName 是一个 Model 对应数据库文件

        searchInput.setName(name);           // JSP 中传送的 parameter

        List name= nameService.search(searchInput, date);     // 读取数据库

        HSSFWorkbook workbook = getWorkbook(name, date);

     

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        workbook.write(baos);

        baos.flush();

        byte[] aa = baos.toByteArray();

        excelStream = new ByteArrayInputStream(aa, 0, aa.length);

        baos.close();

        return SUCCESS;

    }

    1. jsp 文件中通过 *.action 传递参数,java 文件中无法获取的问题 (原因:对应的 ExportAction 类中没有设置 get、set 方法。)


    2. getWorkbook()  -  生成EXCEL表

        HSSFWorkbook workbook = new HSSFWorkbook();

        HSSFSheet sheet1 = workbook.createSheet("Total"); //包含两个sheet页

        HSSFSheet sheet2 = workbook.createSheet("Details");

        HSSFRow row = sheet1.createRow(0);

        HSSFCell cell = row.createCell(i);

    展开全文
  • springMVC(4)---生成excel文件导出在开发过程中,需要将数据库中的数据以excel表格的方式导出。首先说明。我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口,用来处理Excel对象。其实POI不仅仅只能处理...

    springMVC(4)---生成excel文件并导出

    在开发过程中,需要将数据库中的数据以excel表格的方式导出。

    首先说明。我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口,用来处理Excel对象。其实POI不仅仅只能处理excel,它还可以处理word、PowerPoint、Visio、甚至Outlook。

    一.首先介绍利用POI如何生成excel。

    首先在生成Excel前,我们需要理解一下Excel文件的组织形式。在POI中,是这样理解的:一个Excel文件对应一个workbook,一个workerbook是有若干个sheet组成的。一个sheet有多个row,一个row一般存在多个cell。

    对于上面的四个名词我们可以在下图理解:

    2dab9eaf572571502c4116fbde32831f.png

    对于生成Excel,POI提供了如下几个基本对象:

    HSSFWorkbook             excel 的文档对象

    HSSFSheet                excel 的表单

    HSSFRow                  excel 的行

    HSSFCell                 excel 的格子单元

    从上面的图片和Excel的组织结构,我们就可以明白创建Excel的步骤。

    1、生成文档对象HSSHWorkbook。

    2、通过HSSFWorkbook生成表单HSSFSheet。

    3、通过HSSFSheet生成行HSSFRow

    4、通过HSSFRow生成单元格HSSFCell。

    下面展示代码:

    第一步、导入jar包

    org.apache.poi

    poi-ooxml

    3.9

    第二步,创建Model对象

    public classPerson {privateString id;privateString name;privateString password;privateString age;publicPerson(String id, String name, String password, String age) {super();this.id =id;this.name =name;this.password =password;this.age =age;

    }//提供set和get方法

    }

    第三步.下载界面 exportexcel.jsp

    functiondownload(){varurl="download_excel?id=10&name=张三";

    window.open(url);

    }

    第四步、ExcleController.java

    importjava.io.UnsupportedEncodingException;importjava.net.URLEncoder;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletResponse;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importcom.ssm.service.impl.ExcleImpl;

    @Controllerpublic classExcleController {//这里直接new了

    ExcleImpl excleImpl=newExcleImpl();

    @RequestMapping(value="/jsp/download_excel")//获取url链接上的参数

    public @ResponseBody String dowm(HttpServletResponse response,@RequestParam("id") String id,@RequestParam("name") String name){

    response.setContentType("application/binary;charset=UTF-8");try{

    ServletOutputStream out=response.getOutputStream();try{//设置文件头:最后一个参数是设置下载文件名(这里我们叫:张三.pdf)

    response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(name+".xls", "UTF-8"));

    }catch(UnsupportedEncodingException e1) {

    e1.printStackTrace();

    }

    String[] titles= { "用户id", "用户姓名", "用户密码", "用户年龄"};

    excleImpl.export(titles, out);return "success";

    }catch(Exception e){

    e.printStackTrace();return "导出信息失败";

    }

    }

    }

    第五步、ExcleImpl 报表导出实现层

    importjava.util.ArrayList;importjavax.servlet.ServletOutputStream;importorg.apache.poi.hssf.usermodel.HSSFCell;importorg.apache.poi.hssf.usermodel.HSSFCellStyle;importorg.apache.poi.hssf.usermodel.HSSFRow;importorg.apache.poi.hssf.usermodel.HSSFSheet;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importcom.ssm.model.Person;public classExcleImpl {public void export(String[] titles, ServletOutputStream out) throwsException{try{//第一步,创建一个workbook,对应一个Excel文件

    HSSFWorkbook workbook = newHSSFWorkbook();//第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

    HSSFSheet hssfSheet = workbook.createSheet("sheet1");//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short

    HSSFRow row= hssfSheet.createRow(0);//第四步,创建单元格,并设置值表头 设置表头居中

    HSSFCellStyle hssfCellStyle =workbook.createCellStyle();//居中样式

    hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

    HSSFCell hssfCell= null;for (int i = 0; i < titles.length; i++) {

    hssfCell= row.createCell(i);//列索引从0开始

    hssfCell.setCellValue(titles[i]);//列名1

    hssfCell.setCellStyle(hssfCellStyle);//列居中显示

    }//第五步,写入实体数据

    Person person1=new Person("1","张三","123","26");

    Person person2=new Person("2","李四","123","18");

    Person person3=new Person("3","王五","123","77");

    Person person4=new Person("4","徐小筱","123","1");//这里我把list当做数据库啦

    ArrayList list=new ArrayList();

    list.add(person1);

    list.add(person2);

    list.add(person3);

    list.add(person4);for (int i = 0; i < list.size(); i++) {

    row= hssfSheet.createRow(i+1);

    Person person=list.get(i);//第六步,创建单元格,并设置值

    String id = null;if(person.getId() != null){

    id=person.getId();

    }

    row.createCell(0).setCellValue(id);

    String name= "";if(person.getName() != null){

    name=person.getName();

    }

    row.createCell(1).setCellValue(name);

    String password= "";if(person.getPassword() != null){

    password=person.getPassword();

    }

    row.createCell(2).setCellValue(password);

    String age=null;if(person.getAge() !=null){

    age=person.getAge();

    }

    row.createCell(3).setCellValue(age);

    }//第七步,将文件输出到客户端浏览器

    try{

    workbook.write(out);

    out.flush();

    out.close();

    }catch(Exception e) {

    e.printStackTrace();

    }

    }catch(Exception e){

    e.printStackTrace();throw new Exception("导出信息失败!");

    }

    }

    }

    第六步:最终效果,当我点击报表导出按钮

    4f319b7070ee741f00d01cbebe7a1415.png

    完美!

    想的太多,做的太少,中间的落差就是烦恼,要么去做,要么别想 少尉【11】

    展开全文
  • 需求说明报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出成 excel 文件,...

    需求说明

    报表展现后可以通过工具栏中的导出按钮将当前展现的报表导出成 excel 文件,但是在实际使用中通常会要求报表不需要展现,直接通过一些操作将报表导出成 excel 文件,并且往往会要求批量导出成 excel 文件,下面通过几个示例介绍下报表不展现,如何批量生成 excel 文件。

    实现这种需求一般要用到 api 方式,批量生成 excel 文件,按照方式上来分大体上可以分为三类:

    一:单表导出单 excel 多 sheet

    二:多表导出单 excel 多 sheet

    三:多表导出多 excel 文件

    单表多 sheet

    此种方式通常是报表格式固定,然后根据某个参数对数据过滤,导出 excel 时需要导出多个参数的数据,并且每个参数的数据放到同一个 excel 的不同 sheet 里,比如本例中按照地区统计订单信息,要求导出时每个地区数据导出到一个 sheet 中,地区名称做为 sheet 名,下面看下这种做法:

    报表设计界面不必多说,按照需求设计就行,如下图:

    9ca3420959cf17402c4ef501eaff6d7b.png

    报表中增加一个参数:area,用于接收地区参数,然后在数据集中通过这个参数过滤数据就行。

    Api 中用到 jsp 代码如下:

    <%@ page contentType="text/html;charset=UTF-8" %>
    
    <%@ page import="com.raqsoft.report.model.*"%>
    
    <%@ page import="com.raqsoft.report.usermodel.*"%>
    
    <%@ page import="com.raqsoft.report.view.*"%>
    
    <%@ page import="com.raqsoft.report.util.*"%>
    
    <%@ page import="com.raqsoft.report.view.excel.ExcelReport"%>
    
    <%
    
     String report = request.getParameter( "report" );//获取报表名称
    
    if(report==null) report="订单.rpx";//如果url上报表名为空,则取订单表
    
    String fileName=report.substring(0,report.length()-4);//读取文件名,用于设置excel名称
    
    String reportName = request.getRealPath("WEB-INFreportFiles"+report);//
    
    String exportPath=request.getRealPath("/export");//在应用根目录下建export目录,放置导出文件
    
    ReportDefine rd = (ReportDefine)ReportUtils.read(reportName);//读取报表
    
    String areas="华北,东北,西北,华南,西南";//此例按照地区循环,实际中可以接收其他参数,也可以从数据库中获取数据
    
    String[] area=areas.split(",");
    
    ExcelReport er=new ExcelReport();
    
    for(int i=0;i<area.length;i++){//按照地区做循环
    
    Context cxt = new Context();
    
    cxt.setParamValue("area",area[i]);//area是报表中定义参数,此处设置参数值
    
      Engine engine = new Engine(rd, cxt); //构造报表引擎
    
      IReport iReport = engine.calc(); //运算报表
    
     er.export(area[i],iReport);//将报表结果设置到excel sheet里
    
    }
    
    er.saveTo(exportPath+"/"+fileName+".xls");//生成excel
    
    %>
    

    这样,就会在应用根目录的 export 目录下生成对应的 excel 文件,生成 excel 文件如下:

    c44d17b1ea2970776523a70ca9f3b543.png

    多表多 sheet

    此种情况应用于导出的 excel 由多个报表组成,然后每个报表导出到 excel 中不同 sheet 中,并且有可能每个报表的参数不同(如果参数相同,那么和示例一类似,只是按报表名称循环就行),下面看下具体实现过程:

    由于不同报表参数可能会不同,所以在 api 中解析每个报表以及对应参数难度会比较大,此例要求通过 url 访问报表时,按照特定格式访问,比如:

    http://localhost:6868/demo/reportJsp/exportExcel1.jsp?report={无参数报表名 1}{无参数报表名 2}{报表 1( 参数 1=value1; 参数 2=value2;…)}{报表 2( 参数 1=value1; 参数 2=value2;…)},比如:http://localhost:6868/demo/reportJsp/exportExcel1.jsp?report={test1.rpx}{test2.rpx(arg1=11;arg2=22;arg3=33)}这种方式,现在在高版本的 tomcat 中,会有一些特殊符号的限定,使用时可以将 {} 转换成对应的 urlencode 方式,{为 %7B,}为 %7B,如果有其他值的话,做对应转换就行,url 设置完成后,接下来就看下如何解析这个 url,并且批量生成 excel,代码如下:

    <%@ page contentType="text/html;charset=UTF-8" %>
    
    <%@ page import="com.raqsoft.report.model.*"%>
    
    <%@ page import="com.raqsoft.report.usermodel.*"%>
    
    <%@ page import="com.raqsoft.report.view.*"%>
    
    <%@ page import="com.raqsoft.report.util.*"%>
    
    <%@ page import="com.raqsoft.report.view.excel.ExcelReport"%>
    
    <%
    
     //此JSP参数格式为:report={无参数报表名1}{无参数报表名2}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}
    
    request.setCharacterEncoding( "UTF-8" );
    
     String report = request.getParameter( "report" );
    
     if( report == null || report.trim().length() == 0 ) throw new Exception( "请输入报表文件名及参数串report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..." );
    
    String exportPath=request.getRealPath("/export");//在应用根目录下建export目录,放置导出文件
    
    String report1=report.replace("}","");//去掉串中的}
    
    String report2=report1.substring(1,report1.length());//去掉串中的最左侧的{
    
    String[] a=report2.split("{");//此时串中多个报表之间用{分隔,所以此处按照该符号split生成数组
    
    ExcelReport er=new ExcelReport();
    
    for(int i=0;i<a.length;i++){//按数组进行循环,也就是按报表循环
    
    if(a[i].lastIndexOf("(")<=0)//判断分割后的子串中是否包含(,如包含,代表有参数,不包含,则没有参数
    
    {
    
    String reportPath = request.getRealPath("WEB-INFreportFiles"+a[i]);//获取报表路径
    
     String sheetName=a[i].substring(0,a[i].length()-4);//获取sheet名称
    
     ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);//读取报表
    
     Context cxt = new Context();
    
     Engine engine = new Engine(rd, cxt); //构造报表引擎
    
    IReport iReport = engine.calc(); //计算报表
    
    er.export(sheetName,iReport);//将报表结果放入sheet
    
    }
    
    else{
    
     System.out.println("报表有参数,报表名为="+a[i].split("(")[0]);//如果有参数,则按(字符split,左侧为报表名
    
     String reportPath = request.getRealPath("WEB-INFreportFiles"+a[i].split("(")[0]);
    
     String sheetName=a[i].split("(")[0].substring(0,a[i].split("(")[0].length()-4);
    
     ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
    
     Context cxt = new Context();
    
     String[] cs=a[i].split("(")[1].replace(")","").split(";");//右侧为参数串,并且去掉参数串的),多个参数用;隔开,所以此处按照;split
    
     for(int j=0;j<cs.length;j++){//按参数循环
    
     cxt.setParamValue(cs[j].split("=")[0],cs[j].split("=")[1]);//设置参数
    
     }
    
     Engine engine = new Engine(rd, cxt); //构造报表引擎
    
    IReport iReport = engine.calc();
    
    er.export(sheetName,iReport);
    
    }
    
    }
    
    er.saveTo(exportPath+"/test.xls");//生成excel
    
    %>
    

    多表多 excel

    此种方式和示例二类似,在实际使用中导出 excel 时要求每个报表导出成不同的 excel 文件,但是后续可能会涉及到下载问题,所以此种方式一般是要建立个临时目录,然后将多个 excel 放到临时目录内,可以进行打包下载。具体代码如下:

    <%@ page contentType="text/html;charset=UTF-8" %>
    
    <%@ page import="com.raqsoft.report.model.*"%>
    
    <%@ page import="com.raqsoft.report.usermodel.*"%>
    
    <%@ page import="com.raqsoft.report.view.*"%>
    
    <%@ page import="com.raqsoft.report.util.*"%>
    
    <%@ page import="com.raqsoft.report.view.excel.ExcelReport"%>
    
    <%
    
     //此JSP参数格式为:report={无参数报表名1}{无参数报表名2}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}
    
    request.setCharacterEncoding( "UTF-8" );
    
     String report = request.getParameter( "report" );
    
     if( report == null || report.trim().length() == 0 ) throw new Exception( "请输入报表文件名及参数串report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..." );
    
    String exportPath=request.getRealPath("/export");//在应用根目录下建export目录,放置导出文件
    
    String fileName=Double.toString(Math.random()*100000000).toString().substring(0,6);
    
    String excelPath=exportPath+""+fileName;
    
    java.io.File file = new java.io.File(excelPath);
    
     if(!file.exists()) {
    
     file.mkdirs();
    
     } else {
    
     }
    
    String report1=report.replace("}","");//去掉串中的}
    
    String report2=report1.substring(1,report1.length());//去掉串中的最左侧的{
    
    String[] a=report2.split("{");//此时串中多个报表之间用{分隔,所以此处按照该符号split生成数组
    
    ExcelReport er=new ExcelReport();
    
    for(int i=0;i<a.length;i++){//按数组进行循环,也就是按报表循环
    
    if(a[i].lastIndexOf("(")<=0)//判断分割后的子串中是否包含(,如包含,代表有参数,不包含,则没有参数
    
    {
    
    String reportPath = request.getRealPath("WEB-INFreportFiles"+a[i]);//获取报表路径
    
     String sheetName=a[i].substring(0,a[i].length()-4);//获取sheet名称
    
     ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);//读取报表
    
     Context cxt = new Context();
    
     Engine engine = new Engine(rd, cxt); //构造报表引擎
    
    IReport iReport = engine.calc(); //计算报表
    
    ReportUtils.exportToExcel2007(excelPath+"/"+sheetName+".xlsx",iReport,false);
    
    er.export(sheetName,iReport);//将报表结果放入sheet
    
    }
    
    else{
    
     System.out.println("报表有参数,报表名为="+a[i].split("(")[0]);//如果有参数,则按(字符split,左侧为报表名
    
     String reportPath = request.getRealPath("WEB-INFreportFiles"+a[i].split("(")[0]);
    
     String sheetName=a[i].split("(")[0].substring(0,a[i].split("(")[0].length()-4);
    
     ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
    
     Context cxt = new Context();
    
     String[] cs=a[i].split("(")[1].replace(")","").split(";");//右侧为参数串,并且去掉参数串的),多个参数用;隔开,所以此处按照;split
    
     for(int j=0;j<cs.length;j++){//按参数循环
    
     cxt.setParamValue(cs[j].split("=")[0],cs[j].split("=")[1]);//设置参数
    
     }
    
     Engine engine = new Engine(rd, cxt); //构造报表引擎
    
    IReport iReport = engine.calc();
    
    ReportUtils.exportToExcel2007(excelPath+"/"+sheetName+".xlsx",iReport,false);
    
    }
    
    }
    
    er.saveTo(exportPath+"/test.xls");//生成excel
    
    %>
    

    打包下载

    文件生成到对应目录下后,可以自己单独做个链接指向这个 excel 文件下载,也可以直接生成 excel 文件后直接进行下载,在对应 jsp 文件中增加如下代码:

    response.setContentType("application/msword");
    
     response.setHeader("Content-disposition","attachment; filename="+java.net.URLEncoder.encode(fileName+".xls", "UTF-8"));
    
     BufferedInputStream bis = null;
    
     BufferedOutputStream bos = null;
    
     try {
    
     bis = new BufferedInputStream(new FileInputStream( exportPath+"/"+fileName+".xls"));
    
     bos = new BufferedOutputStream(response.getOutputStream());
    
     byte[] buff = new byte[2048];
    
     int bytesRead;
    
     while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
    
     bos.write(buff,0,bytesRead);
    
     }
    
     } catch(final IOException e) {
    
     System.out.println ( "出现IOException." + e );
    
     } finally {
    
     if (bis != null)
    
     bis.close();
    
     if (bos != null)
    
     bos.close();
    
     }
    
     System.out.println ( "下载完成----------------" );
    
    File file = new File(exportPath+"/"+fileName+".xls");
    
    if (file.exists()) file.delete();//删除文件
    
    实际应用中可能会需要将文件大成zip包方式,比如示例三,这个直接百度下java程序打zip包,然后下载zip包就行。

    总结

    本文中介绍了如何通过 api 将报表批量导出成 excel 的方法,实际中也有可能生成 pdf 或者 txt 等,思路是一样到,到时候换用不同的 api 就行。

    展开全文
  • (PS:刚转PHP!) 用了最新版的phpspreadsheet(phpexcel的下一个版本), 关于PHP导出EXCEL的DEMO, laravel框架; 前台 index.blade.php; 路由 routes/web.php; 控制器 ExcelController;
  • 功能描述:前端页面中点击excel导出按钮,可以直接下载excel。 首先在pom.xml文件中加入easyexcel依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</...
  • web项目-Excel文件导出

    千次阅读 2017-11-24 17:29:40
    文件导出是在web项目中常用的功能之一。在这里我也谈一下本人的拙见。 此次我遇到的是从easyUI框架中查询数据的导出,当然,不管框架怎么变,万变不离其宗,导出功能学懂一个就差不多够用了。 这里我的前台查询条件...
  • 1.导入导出功能操作步骤导入:"下载导入模板" -->保存文件到本地-->...保存Excel文件到本地。2.功能实现原理2.1.外部组件依赖说明(1)数据库访问相关:mysql-connector-jaca-5.0.8-bin.jarc3p0-0.9.1.2.jar...
  • 使用easyExcel导出excel文件

    千次阅读 2022-02-13 17:45:17
    1.导入jar包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel<...2.点击导出按钮,浏览器开始下载对应的数据,也可以实现批量导出 3.实...
  • 如何将网页表格导出excel用现成的组件:点击button开始导出:$("button").click(function(){$("#table2excel").table2excel({exclude: ".noExl",name: "Worksheet Name",filename: "SomeFile"});});下载:ort-...
  • 方法一 通过GridView(简评:方法比较简单,但是只适合生成格式简单的Excel,且无法保留VBA代码),页面无刷新aspx.cs部分 代码如下:using System; using System.Collections; using System.Configuration; using ...
  • C#导出EXCEL方法总结

    2020-12-30 15:42:18
    下面介绍下我根据网上学习C#中导出EXCEL的几种方法:一、asp.net导出Excel1.将整个html全部输出到Excel此方法会将html中所有的内容,如按钮、表格、图片等全部输出View Code1 Response.Clear();2 Response.Buffer= ...
  • EasyExcel实现Excel文件导入导出

    万次阅读 多人点赞 2021-09-12 12:28:01
    EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档: ...
  • JavaScript是一个涵盖多种框架、直译式、可以轻松自定义客户端的脚本语言,在 Web 应用程序中,更加易于编码和维护。而Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能和图表工具,...
  • Controller获取数据导出Excel,详细教程 1:导入对应依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.1.3</...
  • 打开文件,查看内容 前端实现 在函数中写入: // 导出Excel的函数 exportFunc() { exportData().then(response => { let blob = new Blob([response.data], { // 这里一定要和后端对应,不然可能出现乱码或者...
  • 我在html中有一个表格,并且我想在用户单击导出按钮后将该表格导出到Excel工作表。我得到了我的表中的导出和数据按钮。但它没有得到导出。 请帮助我。下文提到的是我的代码导出html表格到Excel不起作用$(document)....
  • 我们以自定义导出 txt 文件为例。2.1 准备模板准备内置模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\GettingStarted.cpt2.2 添加自定义按钮1)打开模板,点击「模板>模板 Web 属性>分页预览设置」...
  • 实现Excel导入与导出功能,并WEB页面附带进度条对Excel进行美化如:设置背景色、线条、格子大小等。 使用步骤很简单 1.解压下载好的项目,这里需要...(这里添加下载数据遍成为导出Excel功能了,清空数据遍为模板)
  • 用户希望不预览报表直接导出结果,如在系统中点击某个标签或点击按钮,就导出报表,该实例可参考页面集成的自定义导出按钮。 1.2 功能描述 直接在预览报表的 URL 后增加&format=导出的格式,通过给 format ...
  • javaweb导出SQL数据到excel 最近javaweb项目需要用到导出MySQL数据到excel的功能,于是记录一下我使用的方法,供大家参考。 关于POI组件使用的原理,大家可以参考这篇博客。 所需jar包 官网下载:地址 积分多的大佬...
  • 页面HTML代码写法——添加到处Excel按钮 &amp;...导出Excel&quot;&amp;gt; selectController.js ——添加内容 //数据导出到excel $scope.exports0 = function () { userServ
  • 简要教程jquery-table2excel是一款可以将HTML...注意导出Excel文件的格式,默认导出为.xlsx格式的excel文件,需要excel2010以上的版本才能打开,如果是使用低版本的excel,可以手动将文件扩展名修改为.xls。查看...
  • ASP.NET使用NPOI将数据导出Excel

    千次阅读 2022-04-29 11:54:14
    【目的】在Web界面及WebAPI接口中实现将数据导出Excel 【技术】使用了ASP.NET MVC和开源项目NPOI
  • 核心提示:1、增加一个导出按钮(点击执行Button1_Click1),并后台加入如下代: protected void Button1_Click1(object sender, EventArgs e) {...1、增加一个导出按钮(点击执行Button1_Click1),并后台加入如下代:...
  • java,springboot的easypoi使用, 导出Excel文件
  • vue项目用 js-xlsx 导出excel
  • 在平时的开发中,我们会经常遇到这样一个需求,要在页面通过一个『导出按钮把查询出的数据导出Excel 表格中。本文即为实现上述需求的一个小实例。环境配置jar包poi.jarjdk 1.6tomcat 7.0eclipse 4.4.0本 Demo ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,634
精华内容 3,853
热门标签
关键字:

web导出按钮导出excel文件