`

交叉报表

阅读更多

package test;

import java.io.*;
import java.util.*;
import javax.xml.parsers.*;

import java.awt.*;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;
import org.w3c.dom.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.*;
import com.lucaslee.report.*;
import com.lucaslee.report.grouparithmetic.*;
import com.lucaslee.report.model.*;
import com.lucaslee.report.model.Table;
import com.lucaslee.report.model.crosstable.*;
import com.lucaslee.report.printer.*;

/**
* 生成交叉表报表例子。
* 从main方法开始执行。
* 注意:例子中对程序段的注释,方法是:在程序段前面加注释,在程序段后面注明段的结束.如:
* 前面://****xxxx***********
* 后面://****end xxxx*******
   *
   * <p>Copyright: Copyright (c) 2004</p>
   * <p>Company:Lucas-lee Soft </p>
   * @author Lucas Lee
   * @version 1.0
   */
public class TestCrossReport {
    public TestCrossReport() {
    }

    /**
     * 根据报表对象生成csv格式的报表.
     * @param report 报表对象
     * @throws Exception
     */
    public static void getExcelReport(Report report,OutputStream os) throws Exception {

      ExcelCss css = new ExcelCss() {
        public void init(HSSFWorkbook workbook) {

          //*****************定义字体*****************
           //普通字体
           HSSFFont fontNormal = workbook.createFont();
          fontNormal.setFontHeightInPoints( (short) 10);
          fontNormal.setFontName("宋体");

          //粗体
          HSSFFont fontBold = workbook.createFont();
          fontBold.setFontHeightInPoints( (short) 10);
          fontBold.setFontName("宋体");
          fontBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

          //大、粗字体
          HSSFFont fontBig = workbook.createFont();
          fontBig.setFontHeightInPoints( (short) 15);
          fontBig.setFontName("宋体");
          fontBig.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          //*****************end定义字体*****************

           //***************设置EXCEL报表的样式表******************
          HSSFCellStyle style = workbook.createCellStyle();
          style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setFont(fontNormal);
          this.setGroupTotal(style);

          style = workbook.createCellStyle();
          style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setFont(fontNormal);
          this.setGroupTotal(style);

          this.setTotal(style);

          style = workbook.createCellStyle();
          style.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setFont(fontBold);
          this.setHead(style);

          style = workbook.createCellStyle();
          style.setFont(fontBig);
          this.setTitle(style);

          style = workbook.createCellStyle();
          style.setFont(fontNormal);
          this.setData(style);

          style = workbook.createCellStyle();
          style.setFillForegroundColor(HSSFColor.ORANGE.index);
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setFont(fontNormal);
          this.setCrossHeadHead(style);

          this.setDefaultColumnWidth( (short) 10);
          //***************end 设置EXCEL报表的样式表******************
        }
      };

      //执行EXCEL格式报表的输出
      new ExcelPrinter().print(report, css, os);

      System.out.println("生成Excel格式报表成功。");
    }

    /**
     * 根据报表对象生成HTML格式的报表.
     * @param report 报表对象
     * @throws Exception
     */
    public static void getHTMLReport(Report report,OutputStream os) throws Exception {


      //***************设置HTML报表的样式表******************
      HTMLCss css = new HTMLCss();
      css.setGroupTotal("BACKGROUND-COLOR: #d8e4f1; font: bold 12pt 隶书;");
      css.setHead("BACKGROUND-COLOR: #ffdead; font: bold 12pt 隶书;");
      css.setTotal("BACKGROUND-COLOR: #d8e4f1; font: bold 12pt 隶书;");
      css.setTitle("font: bold 18pt ;");
      css.setData("font: 12pt");
      css.setCrossHeadHead("BACKGROUND-COLOR: #a68763; font: 9pt ");
      //***************end 设置HTML报表的样式表******************

       //执行HTML格式报表的输出
      new HTMLPrinter().print(report, css, os);

      System.out.println("生成HTML格式报表成功。");
    }

    /**
     * 根据报表对象生成pdf格式的报表.
     * @param report 报表对象
     * @throws Exception
     */
    public static void getPDFReport(Report report,OutputStream os) throws Exception {
      //******************定义pdf中文字体*****************
      BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
                                               BaseFont.NOT_EMBEDDED);
      BaseFont bfChineseBold = BaseFont.createFont("STSong-Light,Bold",
          "UniGB-UCS2-H",
          BaseFont.NOT_EMBEDDED);
      Font FontChinese = new Font(bfChinese, 10, Font.NORMAL);
      Font FontChineseBold = new Font(bfChineseBold, 10, Font.NORMAL);
      //******************end 定义pdf中文字体*****************

       //****************设置pdf报表的样式表*********************
      PDFCss css = new PDFCss();

      PDFCssItem item = new PDFCssItem();
      item.setBackgroudColor(new Color(0xd8e4f1));
      item.setFont(FontChinese);
      css.setGroupTotal(item);
      css.setTotal(item);

      item = new PDFCssItem();
      item.setBackgroudColor(new Color(0xffdead));
      item.setFont(FontChineseBold);
      css.setHead(item);

      item = new PDFCssItem();
      item.setFont(new Font(bfChineseBold, 15, Font.BOLD));
      css.setTitle(item);

      item = new PDFCssItem();
      item.setFont(new Font(bfChinese, 10, Font.NORMAL));
      css.setData(item);

      item = new PDFCssItem();
      item.setFont(new Font(bfChinese, 7, Font.NORMAL));
      item.setBackgroudColor(new Color(0xffdead));
      css.setCrossHeadHead(item);
      //****************end 设置pdf报表的样式表*********************

       //执行PDF格式报表的输出
      new PDFPrinter().print(report, css, os);

      System.out.println("生成PDF格式报表成功。");
    }

    /**
     * 根据报表对象生成csv格式的报表.
     * @param report 报表对象
     * @throws Exception
     */
    public static void getCSVReport(Report report,OutputStream os) throws Exception {
      //执行CSV格式报表的输出
      new CSVPrinter().print(report, os);

      System.out.println("生成CSV格式报表成功。");
    }

    /**
     * 设置报表的头部和尾部.
     * @param report 要设置头尾的报表对象.
     * @throws ReportException
     */
    private static void setTitleFooter(Report report) throws ReportException {
      //*****************设置报表头部*********************
       Table headerTable = new Table();
       //设置表格的宽度比例(百分比)
      int[] widths = {
          20, 60, 20};
      headerTable.setWidths(widths);
      report.setHeaderTable(headerTable);

      headerTable.setBorder(0);
      headerTable.setAlign(headerTable.ALIGN_CENTER);

      TableCell tc = null;
      TableRow tr = null;

      tr = new TableRow(3);
      headerTable.addRow(tr);
      tc = tr.getCell(0);
      tc.setColSpan(3);
      tc.setAlign(tc.ALIGN_CENTER);
      tc.setContent("中国XXX股份有限公司XXX分公司");
      tr.getCell(1).setIsHidden(true);
      tr.getCell(2).setIsHidden(true);

      tr = new TableRow(3);
      headerTable.addRow(tr);
      tc = tr.getCell(0);
      tc.setColSpan(3);
      tc.setAlign(tc.ALIGN_CENTER);
      tc.setContent("产品销售统计报表");
      tc.setCssClass(Report.TITLE_TYPE);
      tr.getCell(1).setIsHidden(true);
      tr.getCell(2).setIsHidden(true);

      tr = new TableRow(3);
      headerTable.addRow(tr);

      tr = new TableRow(3);
      headerTable.addRow(tr);
      tc = tr.getCell(0);
      tc.setContent("单位:xxx分公司");
      tc.setAlign(tc.ALIGN_LEFT);
      tc = tr.getCell(1);
      tc.setContent("报表日期:2003-11-11至2003-11-16");
      tc.setAlign(tc.ALIGN_CENTER);
      tc = tr.getCell(2);
      tc.setAlign(tc.ALIGN_RIGHT);
      tc.setContent("单位:吨 元");
      //*****************end 设置报表头部*********************

       //*****************设置报表尾部*********************
      Table footerTable = new Table();
      report.setFooterTable(footerTable);

      tr = new TableRow(3);
      footerTable.setBorder(0);
      footerTable.setAlign(footerTable.ALIGN_CENTER);
      footerTable.addRow(tr);
      tr.getCell(0).setContent("制表人:xxx");
      tr.getCell(0).setAlign(tc.ALIGN_LEFT);
      tr.getCell(1).setContent("审核人:xxx");
      tr.getCell(1).setAlign(tc.ALIGN_CENTER);
      tr.getCell(2).setContent("制表日期:xxx");
      tr.getCell(2).setAlign(tc.ALIGN_RIGHT);
      //*****************end 设置报表尾部*********************
    }

    /**
     * 从xml文件获得原始数据表格.注意其中使用的crossTabSample.xml应该设置为此文件所在的路径.
     * @return
     * @throws Exception
     */
   private static Table getTableByXML() throws Exception {
      //xml文件路径,应该设置为crossTabSample.xml所在的路径
      String fileName = "E:\\crossTabSample.xml";
      Table t = new Table();

      //用JAXP读取xml文件
      Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().
          parse(new File(fileName));
      Element e = doc.getDocumentElement();
      NodeList xmlTab = e.getChildNodes();
      for (int i = 0; i < xmlTab.getLength(); i++) {
        if (xmlTab.item(i).getNodeName().equals("Row")) {
          TableRow tr = new TableRow();
          NodeList xmlTR = xmlTab.item(i).getChildNodes();
          for (int j = 0; j < xmlTR.getLength(); j++) {
            if (xmlTR.item(j).getNodeName().equals("data")) {
              TableCell tc = new TableCell();
              tc.setContent(xmlTR.item(j).getFirstChild().getNodeValue());
              tr.addCell(tc);
            }
          }
          t.addRow(tr);
        }
      }
      return t;
    }

    /**
     * 获得报表对象
     * @throws Exception
     * @return Report
     */
    public static Report getReport() throws Exception {
      //报表管理器
      ReportManager rm = new ReportManager();

      //待处理的原始数据表格对象
      Table t = getTableByXML();

      //************定义交叉表*************
      HeadCol[] colH = {
          new HeadCol(2, "厂家")};
      HeadCol[] rowH = {
          new HeadCol(0, "品种"), new HeadCol(1, "市场")};
      Vector sort1 = new Vector();
      sort1.add("本单位");
      sort1.add("长江牌");
      colH[0].setSortSeq(sort1);

      CrossCol crs = new CrossCol(3, "销售额", new SumArithmetic());
      CrossTable crossTab = new CrossTable(colH, rowH, crs);
      //************end 定义交叉表*************

       //通过原始数据和交叉表的定义生成交叉表
      t = rm.generateCrossTab(t, crossTab);

      //进行行统计
      t = rm.generateCrossTabRowTotal(t, crossTab, true,
                                      new SumArithmetic());

      //进行列统计
      t = rm.generateCrossTabColTotal(t, crossTab, false, new SumArithmetic());

      //格式化数据
      t = rm.formatData(t, crossTab, new DefaultFormatter());

      //****************定义报表的其他部分****************
      Report report = new Report();

      //将交叉表设为报表的主体
      ReportBody body = new ReportBody();
      body.setData(t);
      report.setBody(body);

      //设置报表的头和尾两部分
      setTitleFooter(report);
      //****************end 定义报表的其他部分************
      return report;
    }

    /**
     * 生成报表.
     * @throws Exception
     */
    public static void generateReport() throws Exception {
      Report report = getReport();
      //输出文件
      FileOutputStream fo=null;

      try {
        //生成HTML格式报表

/*       fo = new FileOutputStream("crossTab.html");
        getHTMLReport(report, fo);
        fo.close();

        //生成PDF格式报表
        fo = new FileOutputStream("crossTab.pdf");
        getPDFReport(report, fo);
        fo.close();

        //生成CSV格式报表
        fo = new FileOutputStream("crossTab.csv");
        getCSVReport(report, fo);
        fo.close();*/

        //生成Excel格式报表
        fo = new FileOutputStream("E:\\crossTab.xls");
        getExcelReport(report, fo);
        fo.flush();
        fo.close();
      } finally{
        if(fo!=null) fo.close();
      }

    }

    public static void main(String[] args) throws Exception {
      generateReport();
    }

}

分享到:
评论

相关推荐

    图像去雾基于基于Matlab界面的(多方法对比,PSNR,信息熵,GUI界面).rar

    MATLAB设计

    c语言打字母游戏源码.zip

    c语言打字母游戏源码

    c语言做的一个任务管理器.zip

    c语言做的一个任务管理器

    JetBra-2021.1.x-重置.mp4.zip

    JetBra-2021.1.x-重置.mp4.zip

    小学班主任与家长沟通现状及改进策略研究

    内容概要:本文围绕小学班主任与家长沟通的现状进行了详尽分析,揭示了沟通方式不当、频率低、内容片面及理念不一致等问题,并基于访谈、文献研究及案例分析,提出了多元化的沟通方式、丰富沟通内容、讲究沟通艺术、转变家长观念和完善制度等多项策略,旨在提高家校合作的效能。 适合人群:从事小学教育教学的班主任、教师以及对家校合作感兴趣的教育工作者。 使用场景及目标:①通过本文提出的多种策略,改善小学班主任与家长之间的沟通;②促进家校互动,助力学生健康成长和发展;③推动教育领域的研究与发展。 阅读建议:本文详细阐述了沟通现状及具体问题,适合系统阅读。读者可根据实际情况,挑选适用于自身的沟通策略实施,并结合实例进行反思与改进。

    WSL批量压缩MP4文件对应Shell脚本文件

    WSL批量压缩MP4文件对应Shell脚本文件

    Java源码ssm框架的社区疫情防控管理系统-毕业设计论文-期末大作业.rar

    本项目是一个基于Java SSM框架的社区疫情防控管理系统,旨在通过信息化手段提升社区疫情防控的效率和准确性。系统集成了居民信息管理、健康监测、疫情上报、隔离管理等多项功能,能够实时跟踪和记录社区居民的健康状况,及时发现潜在的风险人员,并对其进行有效的隔离和管理。系统采用了Spring、Spring MVC和MyBatis三大框架技术,确保了系统的稳定性和扩展性。通过前端页面与后端逻辑的紧密配合,系统实现了数据的动态展示和交互操作,极大地方便了社区工作人员的日常工作。此外,系统还具备强大的数据统计和分析功能,能够帮助管理人员全面掌握社区的疫情动态,制定科学合理的防控措施。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    Motorcad 外转子式42极36槽 永磁同步电机,直流无刷电机设计案例, 该电机55kw,220rpm,功率密度较高

    Motorcad 外转子式42极36槽 永磁同步电机,直流无刷电机设计案例,。 该电机55kw,220rpm,功率密度较高

    labview控制 西门子S7-1200 1214 dcdcdcplc 程序 plc只需要设置连接机制与IP即可 通讯为TCP IP协议

    labview控制 西门子S7-1200 1214 dcdcdcplc 程序 plc只需要设置连接机制与IP即可 通讯为TCP IP协议

    城市驾驶舱解决方案.pdf

    城市驾驶舱解决方案.pdf

    Shell教程v1.0中文PDF完整版最新版本

    Shell是一种用C语言编写的程序,它作为用户与Unix/Linux系统之间的桥梁,使得用户可以通过Shell完成大部分工作。Shell既是一个命令语言,也是一个程序设计语言。 本书《Shell教程》以简洁明了的语言向读者介绍Shell编程,旨在帮助读者迅速掌握Shell编程技能,并能够编写出实用的程序和代码,特别适合初学者学习。 **目录** - **前言** - **第1章 Shell简介** - 介绍Shell及其命令的两种执行方式。 - **第2章 常见的Shell类型** - **第3章 Shell与编译型语言的对比** - **第4章 Shell的使用场景** - **第5章 编写第一个Shell脚本** - **第6章 Shell变量** - 包括Shell变量的定义、删除、只读变量以及变量类型。 - **第7章 Shell特殊变量** - 讨论Shell中的$0, $#, $*, $@, $?, $$等特殊变量及其与命令行参数的关系。 - **第8章 Shell替换** - **第9章 Shell运算符** - 包括算数运算符、关系运算符、布尔运算

    CNC编程员个人简历模板

    CNC编程员个人简历模板

    机械设计摇摆喂料机 sw21全套设计资料100%好用.zip

    机械设计摇摆喂料机 sw21全套设计资料100%好用.zip

    拍打经络操mmexport1735392775826.mp4

    中医养生,拍打经络操全身轻松百病除

    2-趣味数学2.3.7 完全免费的数学学习软件

    【软件介绍】:趣味数学是一款完全免费的数学学习软件,无需注册登录,界面简约纯净。它支持多种分类学习,如趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等。其中,趣味数学含154个题目和关卡,数学初练含75个题目,应用计算含310个题目,数字推理含260个题目,图形推理含116个题目,数字2048含79个关卡。题目练习功能可按初中、高中选择,并细分学期与题目类型。数学知识合集功能涵盖初中和高中的各种知识点,共100个高中学习章节,每个章节包含多个知识点。软件不仅提供丰富的数学知识学习,还支持多类型的数学刷题,所有题目均配有答案和解析。

    基于Java 实现的Android手机平台的背单词软件,利用手机解锁记忆单词 锁屏背单词力争帮大家合理地利用好碎片时间,把原本无用的时间变得有用,把没有意义的事情(解锁)变得有意义

    【作品名称】:基于Java 实现的Android手机平台的背单词软件,利用手机解锁记忆单词。锁屏背单词力争帮大家合理地利用好碎片时间,把原本无用的时间变得有用,把没有意义的事情(解锁)变得有意义 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 主要功能 (1)背单词解锁:锁屏界面滑动单词解锁。 (2)语音朗读:单词真人发音。 (3)复习单词:内置专业的复习功能,有效巩固单词。 (4)学习记录:记录每日解锁次数和学习量,鼓励督促学习。 (5)生词本:卡片堆叠式记录学习不熟练和答错的单词并复习。 (6)词句翻译:查询陌生词句,了解释义与读音。 (7)锁屏壁纸选择:可选默认壁纸,也可选取手机相册照片作为锁屏壁纸。 (8)名人名句:每日一句名人名句。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    微信小程序源码-智慧旅游平台开发微信小程序-微信端-毕业设计源码-期末大作业.zip

    本项目是围绕智慧旅游平台开发的微信小程序,旨在为游客提供更为便捷、全面的旅游信息服务。通过该小程序,用户可以轻松查询旅游景点信息、预订门票和酒店,同时还能获取实时天气、交通指南等实用数据,极大提升了旅游的便利性和趣味性。 在功能方面,小程序集成了地图导航、旅游攻略、在线支付等多项实用功能,用户可以根据自身需求灵活选择使用。框架方面,项目采用了微信小程序原生开发框架,确保了良好的用户体验和流畅的操作性能。 此外,该项目还融入了数据分析功能,帮助旅游管理部门更好地了解游客需求,优化旅游资源配置。项目的开发不仅锻炼了学生的实践能力,也为智慧旅游平台的建设提供了有力支持。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    matlab-B样条轨迹规划-1 七次非均匀B样条轨迹规划, 基于NSGAII的时间-能量-冲击最优 上自己的关节值和时间就能用,简单好用,

    matlab-B样条轨迹规划-1 七次非均匀B样条轨迹规划, 基于NSGAII的时间-能量-冲击最优。 上自己的关节值和时间就能用,简单好用,

    基于springboot的餐品美食论坛源码(java毕业设计完整源码).zip

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    基于点分布模型集合的方法用于小鼠脑基因表达图像分割

    内容概要:本文提出了一种名为PDM-ENLOR的新方法,解决了统计形状模型(如Active Shape Models)在复杂形状表示中的局限性。PDM-ENLOR通过使用一系列局部回归模型来独立定位每个标志点,利用选定的显着标志点作为解释变量,并通过几何约束编码来提高模型灵活性。该方法在小鼠脑基因表达图像的多区域分割任务上表现优异,整体重叠率达到了88.1%,标准偏差为9.5%。 适合人群:医学图像分析研究人员、生物医学工程专业学生以及对图像分割和机器学习感兴趣的科研人员。 使用场景及目标:该方法适用于需要对复杂形状进行高精度分割的场景,特别是在缺乏明确边界特征的医学图像数据集中。其目标是在不牺牲模型灵活度的前提下,减少因噪声和图像复杂性导致的检测误差。 其他说明:本文提供了详细的实验验证和比较,包括不同模型设置下的性能评估,验证了PDM-ENLOR在多种相似性度量指标下的鲁棒性和有效性。此外,文章还讨论了方法的局限性和未来改进方向。

Global site tag (gtag.js) - Google Analytics