在报表中设置的页眉页脚在页面中是看不到的,如下图:

页面中的效果:

在打印的时候,可以看到页眉页脚的效果:

那么,如果将页眉页脚导入到导出的excel中呢.我们可以通过API来进行设置:

<%@ pageimport="com.runqian.report4.model.*"%>

<%@ page import="com.runqian.report4.usermodel.*"%>

<%@ page import="com.runqian.report4.view.excel.*" %>

<%@ page import="com.runqian.report4.util.*" %>

<jsp:directive.pageimport="org.apache.poi2.hssf.usermodel.HSSFWorkbook"/>

<jsp:directive.pageimport="org.apache.poi2.hssf.usermodel.HSSFSheet"/>

<jsp:directive.page import="org.apache.poi2.hssf.usermodel.HSSFHeader"/>

<jsp:directive.pageimport="org.apache.poi2.hssf.usermodel.HSSFFooter"/>

<%

 //设置所有report对象的值为GBK转码

 request.setCharacterEncoding("GBK");

 

 String reportFile = request.getParameter("report");

 if( reportFile==null ){

  reportFile = "report_4.raq";

 }

 

 //第一步,读取报表模板

 InputStreamfis=application.getResourceAsStream("/reportFiles/"+reportFile);

 ReportDefine rd = (ReportDefine)ReportUtils.read( fis );

 

 //第二步,设置报表授权文件,运算报表

 Context context = new Context();

 //计算前,设置参数与宏

 ParamMetaData pmd = rd.getParamMetaData();

 String paramOrMocrName = "";

 if(pmd != null){

  for(int i = 0;i <pmd.getParamCount(); i ++){

   paramOrMocrName = pmd.getParam(i).getParamName();

   context.setParamValue(paramOrMocrName,request.getParameter(paramOrMocrName));

  }

 }

 MacroMetaData mmd = rd.getMacroMetaData();

 if( mmd != null ){

  for(int i = 0; i < mmd.getMacroCount(); i ++){

   paramOrMocrName = mmd.getMacro(i).getMacroName();

   context.setMacroValue(paramOrMocrName,request.getParameter(paramOrMocrName));

  }

 }

Engine enging = new Engine( rd, context);

 IReport iReport = enging.calc();

 

 //生成Excel文件,因为jsp里不能直接用response的out.print()方法,所以我们先在服务器上生成这个文件

   StringsaveFile=request.getRealPath("/reportFiles/")+"/"+reportFile+".xls";

  

   ExcelReport eReoprt = new ExcelReport();

   eReoprt.export(iReport);

 

   FileOutputStream fos = new FileOutputStream( saveFile );

    eReoprt.saveTo(fos);

   fos.close();

  

   HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(saveFile));

   wb.setSheetName(0,"表1");

   HSSFSheet  s=wb.getSheetAt(0);

   HSSFHeader hss = s.getHeader();

   //hss.setCenter("aaaa");

   StringBuffer stringBuffer = new StringBuffer();

   StringBuffer sb = new StringBuffer();

   int rowNum = iReport.getRowCount();

   int colNum = iReport.getColCount();

   sb.append("行数:"+rowNum+";列数:"+colNum);

  

   //部分(左中右),

   int centerStartCol =colNum/3+1;      //中间部分开始列

   int rightStartCol = colNum/3*2+colNum%3+1;   //右边部分开始列

   sb.append(";中间开始部分:"+centerStartCol+";右边开始部分:"+rightStartCol);

   //页眉左边部分

   

    for(int i=1,j=rowNum;i<=j;i++){

      IRowCell iRowCell=iReport.getRowCell(i);

    if( iRowCell.getRowType()==iRowCell.TYPE_PAGE_HEADER ){

     

      if(iRowCell.getRowVisible()!=false ){

       for(int m=1,n=centerStartCol;m<=n;m++){

        

        INormalCell cell =iReport.getCell(i,(short)m);

        sb.append(";左边部分:"+cell.isMerged());

        

        Object obj=cell.getValue();

        if(obj!=null){

        stringBuffer.append(obj.toString());

        HSSFHeader hh=s.getHeader();

        hh.setLeft(stringBuffer.toString());

       }

       }

       stringBuffer.append("\r");

      }

     }

    } 

  

  stringBuffer.delete(0,stringBuffer.length());

  //页眉中间部分

  System.out.println(sb.toString());

 

    for(int i=1,j=rowNum;i<=j;i++){

      IRowCell iRowCell=iReport.getRowCell(i);

    if( iRowCell.getRowType()==iRowCell.TYPE_PAGE_HEADER ){

     if(iRowCell.getRowVisible()!=false ){

      for(intm=rightStartCol,n=rightStartCol;m<=n;m++){

       

       INormalCell cell = iReport.getCell(i,(short)m);

       sb.append(";中间部分:"+cell.isMerged());

       

       Object obj=cell.getValue();

       if(obj!=null){

        stringBuffer.append(obj.toString());

       HSSFHeader hh=s.getHeader();

       hh.setCenter(stringBuffer.toString());

      }

      }

      stringBuffer.append("\r");

     }

    } 

   } 

 

  stringBuffer.delete(0,stringBuffer.length());

  System.out.println(sb.toString());

  //页眉右边部分

  

    for(int i=1,j=rowNum;i<=j;i++){

      IRowCell iRowCell=iReport.getRowCell(i);

    if( iRowCell.getRowType()==iRowCell.TYPE_PAGE_HEADER ){

     if(iRowCell.getRowVisible()!=false ){

      for(int m=centerStartCol,n=colNum;m<=n;m++){

       INormalCell cell =iReport.getCell(i,(short)m);

       sb.append(";右边部分:"+cell.isMerged());

       

       Object obj=cell.getValue();

       if(obj!=null){

        stringBuffer.append(obj.toString());

       HSSFHeader hh=s.getHeader();

       hh.setCenter(stringBuffer.toString());

      }

      }

      stringBuffer.append("\r");

     }

    } 

   }    

    for(int i=1,j=iReport.getColCount();i<=j;i++){

     IColCell irc=iReport.getColCell((short)i);

     

     if(irc.getBreakPage()){

     s.setColumnBreak((short)(i-1));

     }

    }

   //结束分页

   //页眉开始

  

   HSSFHeader hh=s.getHeader();

   System.out.println("日期&D:"+HSSFHeader.date());

   System.out.println("当前页&P:"+HSSFHeader.page());

   System.out.println("页数&N:"+HSSFHeader.numPages());

   System.out.println("时间&T:"+HSSFHeader.time());

   System.out.println("日期&D:"+HSSFHeader.date());

//页眉结束

   //设置页脚

   HSSFFooter footer = s.getFooter();

   footer.setCenter( "第 " + HSSFFooter.page() +"   
共 " + HSSFFooter.numPages());

   //页脚结束

   //标题行

  

    System.out.println("========="+stringBuffer);

    System.out.println("第一行第五列:"+iReport.getCell(1,(short)5).getValue().toString());

 //转跳到我们刚才生成的文件

 wb.write(new FileOutputStream(saveFile));

 System.out.println("Excel文件生成结束,文件保存在:"+saveFile);

 response.sendRedirect(request.getContextPath()+"/reportFiles/"+reportFile+".xls");

 for(int i=1;i<=iReport.getColCount();i++){

  System.out.println(iReport.getCell(1,(short)i).getValue());

 }

%>

如何利用API导出带有页眉页脚的excel的更多相关文章

  1. iText + Freemarker实现pdf的导出,支持中文、css以及图片,页眉页脚,页眉添加图片

    本文为了记录自己的实现过程,具体的实现步骤是参考博文 https://www.cnblogs.com/youzhibing/p/7692366.html 来实现的,只是在他的基础上添加了页眉页脚及页眉 ...

  2. itext 生成pdf文件添加页眉页脚

    原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...

  3. LaTeX 页眉页脚的设置

    Latex中页眉页脚的设置 1. 首先要加页眉页脚的话,需要启动宏: 我通常用fancyhdr宏包来设置页眉和页脚. \usepackage{fancyhdr} 我们在 LaTeX 中先把 page ...

  4. 【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页

    itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...

  5. 在C#中实现Word页眉页脚的全部功能

    页眉页脚经常使用于文章排版,在Word工具栏里.我们能够加入页眉,页脚,页码,日期和时间.图片等信息和内容.页眉/页脚有两个额外选项:首页不同,奇偶页不同.有时在不同的节(section)里插入不同的 ...

  6. 关于JavaScript打印去掉页眉页脚

    因为这个问题,Google和百度都查了个遍,网上主要解决方案都是这一个代码: <script language="JavaScript"> var hkey_root, ...

  7. 使用C#在word中插入页眉页脚

    //插入页脚 public void InsertFooter(string footer) { if (ActiveWindow.ActivePane.View.Type == WdViewType ...

  8. 【itext】7步制作兼容各种文档格式的Itext5页眉页脚 实现page x pf y

    itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...

  9. C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化

    转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...

随机推荐

  1. Visual Studio和eclipse的大小写转换快捷键

    Visual Studio: 转小写:ctrl + u 转大写:  ctrl + shift + u eclipse: 转小写:  ctrl + shift + y 转大写:  ctrl + shif ...

  2. Spring Security构建Rest服务-0800-Spring Security图片验证码

    验证码逻辑 以前在项目中也做过验证码,生成验证码的代码网上有很多,也有一些第三方的jar包也可以生成漂亮的验证码.验证码逻辑很简单,就是在登录页放一个image标签,src指向一个controller ...

  3. 前端通信:ajax设计方案(四)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组

    马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...

  4. dos命令行运行.class源文件错误解决办法

    dos命令行运行java源文件 public static void main(String[] args) throws IOException { // TODO Auto-generated m ...

  5. 编程开发(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)

    使用Docker快速部署主流编程语言的开发.编译环境及其常用框架,包括C.C++.Java.Python.JavaScript.Go.PHP.Ruby.Perl.R.Erlang等. 在今后采用编程语 ...

  6. jenkins-node-pipeline

    Jenkins node创建 1.jenkins搭建参考我的另外一篇文章:    http://www.cnblogs.com/cuishuai/p/7544775.html 2.搭建完成后登录,选择 ...

  7. Node.js其他模块

    清明假期过得挺快,3天说没就没了,天热了今天把房间打扫了一下,看着挺舒心的.周六了解了下进程管理的Process模块,由于进程管理知识也比较多,今天先把其他的一些模块了解一下,进程管理这块以后慢慢学. ...

  8. Linux 文件流管理

    1. 打开/关闭文件 1). 打开文件 / fopen 作用: 打开一个文件,将其与文件流联系起来,方便后续的操作 头文件: #include <stdio.h> 函数原型: FILE * ...

  9. Ionic3 UI组件之 PhotoViewer

    PhotoViewer是常用的Cordova Plugin之一,用来显示图片. 组件特性: 根据Url显示图片 支持手势,可放大缩小 带分享按钮,可分享图片 带关闭按钮 加载错误时自动关闭组件 支持B ...

  10. ASP.NET MVC 学习笔记-3.面向对象设计原则

    在设计程序.系统框架或者类时,最主要考虑的事情就是代码的可扩展性,而不是完成功能即可.因此,提倡使用面向对象设计的最佳实践和基本原则. 1.       单一职责原则(SRP:The Single R ...