继续中午....
代码中com.cntrust.report.example包下已经提供三种表格的实例代码,可直接运行。
列头表格:ColHeadReport
使用场景:类似常见的信息列表,由列头和数据行构成,如下图:
生成代码:
package com.cntrust.report.example; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import jxl.write.WriteException; import com.cntrust.report.Cell; import com.cntrust.report.ColHeadReport; import com.cntrust.report.format.DefaultExcelReportFormat; public class ColHeadReportTest { /** * @param args * @throws IOException * @throws WriteException */ public static void main(String[] args) throws WriteException, IOException { List<Cell> cols = new ArrayList<Cell>(); /** * * 向列头列表中填充单元格 * */ cols.add(new Cell("sh1", "上海市第一中学", "-1")); cols.add(new Cell("sh2", "上海市第二中学", "-1")); //单元格的构造函数参数列表:单元格唯一标识、单元格显示名称、上级单元格的唯一标识 cols.add(new Cell("sh2,一班", "一班", "sh2")); cols.add(new Cell("sh2,一班,数学", "数学", "sh2,一班")); cols.add(new Cell("sh2,一班,语文", "语文", "sh2,一班")); cols.add(new Cell("03", "二班", "sh2")); cols.add(new Cell("03,01", "数学", "03")); cols.add(new Cell("03,01", "语文", "03")); cols.add(new Cell("04", "一班", "sh1")); cols.add(new Cell("04,01", "数学", "04")); cols.add(new Cell("04,02", "语文", "04")); cols.add(new Cell("05", "二班", "sh1")); cols.add(new Cell("05,01", "数学", "05")); cols.add(new Cell("05,01", "语文", "05")); //根据列头构建报表 ColHeadReport report = new ColHeadReport(cols); for (int i = 1; i < 11; i++) { //为上海市第二中学一班的数学添加数据 /** * * 向表格中插入数据有点类似于根据坐标打点的方式, * 插入的数据根据数据单元格对应的行头单元格ID和列头单元格ID定位, * 然后想单元格内部的Map集合内插入键值对,也支持直接插入一个Map集合 * */ report.setData(i, "sh2,一班,数学", "score", i); /** * * 或是这样,通过Map集合的方式插入数据 * */ // Map<String, Object> map = new HashMap<String, Object>(); // map.put("score", i); // report.setData(i, "sh2,一班,数学", map); } //设置标题 report.setTitle("上海市中学成绩表"); //默认的格式化类通过传人键“score”从数据单元格中读取出对应的值显示在Excel中 report.toExcel(new DefaultExcelReportFormat("score"), new File("D:/成绩表_ColHeadReport.xls")); System.out.println("完成!"); } }
行头表格:RowHeadReport
使用场景:这种表格不怎么常见,不过还是加上吧,有时候交叉表格不太好实现的就用这个替代一下也可以的,如下图:
生成代码:
格式化的代码:DailyReportFormat
package com.cntrust.report.example.format; import jxl.format.Alignment; import jxl.format.VerticalAlignment; import jxl.write.Label; import jxl.write.WritableCell; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WriteException; import com.cntrust.report.Cell; import com.cntrust.report.Report; import com.cntrust.report.Row; import com.cntrust.report.format.ExcelReportFormat; public class DailyReportFormat extends ExcelReportFormat{ private String key = "co"; private WritableSheet sheet; public DailyReportFormat(){ } public DailyReportFormat(String key){ this.key = key; } @Override public void after(WritableSheet sheet, Report report) throws WriteException { // TODO Auto-generated method stub } @Override public void before(WritableSheet sheet, Report report) throws WriteException { sheet.setName("sheet1"); //设置第一列宽度 sheet.setColumnView(0, 28); sheet.setColumnView(1, 30); sheet.setColumnView(2, 125); //设置第一二三四行高度 sheet.setRowView(0, 660); //sheet.setRowView(1, 360); //合并单元格 sheet.mergeCells(0, 0, report.getColSpan() - 1, 0); // sheet.mergeCells(0, 1, report.getColSpan() - 1, 1); WritableCellFormat format = this.getCellFormatWithNoBorder(this.getFont(WritableFont.ARIAL, 16, true, false)); Label title = new Label(0, 0, report.getTitle(), format); sheet.addCell(title); format = this.getCellFormatWithNoBorder(this.getFont(WritableFont.ARIAL, 10, true, false)); //水平居左 format.setAlignment(Alignment.LEFT); //设置垂直居下 format.setVerticalAlignment(VerticalAlignment.BOTTOM); //format.setShrinkToFit(false); //sheet.addCell(new Label(0, 1, "日期:" + new Date().toLocaleString().substring(0, 10), format)); this.sheet = sheet; } @Override public WritableCell getCell(int colIndex, int rowIndex, Cell c) throws WriteException { WritableFont font = null; WritableCell cell = null; String cellType = c.getData().get("cellType") == null ? null : c.getData().get("cellType").toString(); if(Report.CELL_TYPE_Data.equals(cellType)){ font = this.getFont(WritableFont.ARIAL, 10, false, false); WritableCellFormat format = this.getCellFormatWithSimpleBorder(font); //水平居中 format.setAlignment(Alignment.LEFT); //行高 this.sheet.setRowView(rowIndex, 1000); //cell = new jxl.write.Number(colIndex, rowIndex, value, format); cell = new Label(colIndex, rowIndex, c.getName(), format); }else if(Report.CELL_TYPE_RowHead.equals(cellType)){ font = this.getFont(WritableFont.ARIAL, 10, true, false); WritableCellFormat format = this.getCellFormatWithSimpleBorder(font); cell = new Label(colIndex, rowIndex, c.getName(), format); //行高 this.sheet.setRowView(rowIndex, 1000); }else{ font = this.getFont(WritableFont.ARIAL, 10, true, false); WritableCellFormat format = this.getCellFormatWithSimpleBorder(font); cell = new Label(colIndex, rowIndex, c.getName(), format); } return cell; } @Override public int getColOffset() { return 0; } @Override public int getRowOffset() { return 1; } @Override public int getTableRowHeight(Report report, Row row, int rowIndex) { return 360; } }
构造表格代码:
package com.cntrust.report.example; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import jxl.write.WriteException; import com.cntrust.report.Cell; import com.cntrust.report.Report; import com.cntrust.report.RowHeadReport; import com.cntrust.report.example.format.DailyReportFormat; public class DailyReportTest { /** * @param args * @throws IOException * @throws WriteException */ public static void main(String[] args) throws WriteException, IOException { /** * * 构造一个包含cellType的Map集合,将会放入Cell中, * 用于在格式化时根据此类型进行不同的显示 * */ Map<String, Object> map = new HashMap<String, Object>(); map.put("cellType", Report.CELL_TYPE_Data); List<Cell> rowList = new ArrayList<Cell>(); rowList.add(new Cell("日期", "日期", "-1")); rowList.add(new Cell("项目", "项目", "日期")); rowList.add(new Cell("内容", "内容", "项目")); rowList.add(new Cell("01", "2014年7月16日", "-1")); rowList.add(new Cell("01,01", "湖北一期", "01")); Cell cell1 = new Cell("01,01,01", "今天我都做了些什么呢?", "01,01"); cell1.setData(map); rowList.add(cell1); Cell cell2 = new Cell("01,01,02", "我也不知道都做了些什么!", "01,01"); cell2.setData(map); rowList.add(cell2); rowList.add(new Cell("01,02", "湖北一期", "02")); Cell cell3 = new Cell("01,02,01", "今天我都做了些什么呢?", "01,02"); cell3.setData(map); rowList.add(cell3); Cell cell4 = new Cell("01,02,02", "我也不知道都做了些什么!", "01,02"); cell4.setData(map); rowList.add(cell4); rowList.add(new Cell("02", "2014年7月17日", "-1")); rowList.add(new Cell("02,01", "湖北二期", "02")); Cell cell5 = new Cell("02,01,01", "我今天做了很多东西", "02,01"); cell5.setData(map); rowList.add(cell5); Cell cell6 = new Cell("02,01,02", "今天的确做了很多东西!", "02,01"); cell6.setData(map); rowList.add(cell6); Cell cell7 = new Cell("02,01,03", "嗯,我确定!", "02,01"); cell7.setData(map); rowList.add(cell7); Report report = new RowHeadReport(rowList); report.toExcel(new DailyReportFormat(), new File("D:/日报_RowHeadReport.xls")); System.out.println("完成!"); } }
交叉表格:CrossReport
使用场景:这类表格使用还是蛮频繁的,特别是对大量数据进行统计,再以很多维度进行显示的情况下,如下图:
实例代码我就不写了,如果数据是从数据库中查询出来在展现,代码量还是蛮少的,作为一个非常懒的程序猿如果让我一一写的话,我会疯掉的!!有兴趣的话自己试着写写吧
以上图片均为统一的接口导出的Excel文件,那如何在页面中用统一的方式展现呢?如下:
简单的CSS样式:
<style type="text/css"> .table_currentDate{ width: 550px; background-color: White; text-align: center; font-weight: 800; font-size: 18px; } .table_dailyReport{ border-collapse: collapse; border: 1px solid #CCCCCC; width: 100%; width: 550px; background-color: White; } .table_dailyReport td{ word-wrap: nowrap; word-break: keep-all;/**----强制文字不换行----**/ border-color: #E3E3E3;/**#ccc**/ padding: 1px 2px 1px 4px; color: #333; } .colHead{ border-bottom: 1px solid windowtext; height: 20px; width: 90px; text-align: center; font-weight: 800; font-size: 16px; background-color: #F7F7F7; } .data{ border-left: 1px solid windowtext; border-right: 1px solid windowtext; border-bottom: 1px solid windowtext; height: 70px; width: 70px; font-size: 14px; text-align: center; } .today{ background-color: #29A0D3; } </style>
JSP中通过EL表达式进行统一的绘制表格(report对象已放入上下文中):
<table id="treeTable" class="table_dailyReport"> <c:forEach items="${report.rowList}" var="row"> <tr> <c:forEach items="${row.cellList}" var="cell"> <td id="${cell.id}" colspan="${cell.colSpan}" rowspan="${cell.rowSpan}" class="${cell.cellType} ${cell.data['today']}"> <c:choose> <c:when test="${cell.cellType == 'data'}">${cell.data['day']}</c:when> <c:otherwise><b>${cell.name}</b></c:otherwise> </c:choose> </td> </c:forEach> </tr> </c:forEach> </table>
差不多就这样吧,展示的思想就是通过行列坐标定位单元格,然后填充数据。
讨论群:107249241
相关推荐
Java实现的,将树形层级结构的数据转换成表格,通过打点的方式向表格中插入数据,支持行头表格、列头表格、交叉表格三种形式
在Java中处理这种数据,我们需要遍历这些层级,构建相应的数据模型来表示树形结构。 该博客中提到的"ExecleToDBUtils.java"文件,很可能是用于读取Excel并将其数据转换为适合存储在Oracle数据库中的格式的工具类。...
该工具类实现java导出树形结构的方法,并未采用excel分组功能实现,而是根据树节点显示层级设置excel样式。针对easyUi,treeGrid开发的导出excel功能。方法简便实用、性强、通俗易懂。项目中亲测,no problem。
在Android应用开发中,树形结构的界面设计是一种常见的数据展示方式,特别是在处理层级关系复杂的数据时,如文件系统、组织架构等。本教程将详细讲解如何利用Android技术实现一个支持单选和多选功能的树形结构示例。...
树形菜单和结合表格的树形菜单是一种常见的用户界面元素,尤其在数据层级结构复杂的Web应用中非常实用。本文将详细介绍这种技术,以及如何利用JavaScript实现,并探讨TableTree4J_V1.2RE这个库提供的功能。 首先,...
在IT领域,树形结构是一种常见的数据组织方式,它以层级的形式表示元素之间的关系,而XTREE则是一种基于HTML和JavaScript实现的树形结构控件。这个“xtree”项目显然是一个具有添加和修改功能的树形结构实现,可能是...
在Java编程领域,"表格树"(Treetable)是一种复合控件,它结合了表格(Table)和树形视图(Tree)的功能,能够同时展示数据的层次结构和线性列表。这种组件通常用于数据组织复杂且具有层级关系的情况,如文件系统、...
- **树形结构表格(TreeGrid)**:一次性生成树形表格,支持完整的分页和列排序功能。 - **其他复杂应用场景**:根据实际需求定制化的无限级树形菜单或树形结构。 #### 八、结论 通过使用Ext JS框架的AsyncTreeNode...
本例"JSP实现树型结构TREE"提供了一个使用JSP(JavaServer Pages)、EXTJS(一个前端JavaScript框架)、JSON(JavaScript Object Notation)以及MySQL数据库来创建树形结构的示例,这对于初学者或开发者来说,是一个...
1. **树形菜单**:树形菜单是一种层次结构的展示方式,它通过节点和边来表示数据之间的层级关系。用户可以通过展开和折叠节点来查看和操作数据。在Web应用中,树形菜单常用于文件管理、组织结构、类别导航等场景。 ...
树状表格结合了表格的行列布局和树形结构的特点,它在每一行数据中可以展开或折叠子级数据,这种形式在数据层级较多且关联性强的情况下非常有用。例如,在项目管理软件中,可以使用树状表格来展示任务的层级关系,父...
在前端,开发人员可能会使用JavaScript库如jQuery、React、Vue或Angular来构建用户界面,这些库提供了丰富的组件和API,可以轻松创建交互式的树形结构。例如,像ag-Grid、Handsontable或wijmo等专业表格库就支持树状...
在Java Excel报表的上下文中,组合模式用于构建树形结构,代表组织中的部门或职位,每个节点可以是另一个子组织或者是个体员工。通过这种方式,我们可以方便地遍历和操作整个组织架构,无论是顶层的公司部门还是底层...
在Excel中,树形字典通常指的是通过表格形式表示的具有层级关系的数据。例如,一个物料管理系统中的材料字典可能包含多个层次,如大类、中类、小类和具体物料,它们之间存在父子关系。这样的结构在Excel中可以通过多...
总结来说,这个项目是一个基于Web的管理界面,利用树形菜单展示三级结构,通过AJAX技术实现实时响应,与SQL Server 2000数据库进行交互,支持数据的插入操作。开发者需要掌握前端开发、后端编程以及数据库管理等相关...
5. 树形网格(TreeGrid):EXT还提供了结合了表格和树结构的TreeGrid组件,可以在同一视图中展示具有层级关系的表格数据。 三、EXT与Struts2整合 在Java Web开发中,EXT与Struts2框架的整合很常见。Struts2是一个...
在Java编程中,树形菜单结构常用于组织和展示层级数据,例如文件系统、组织架构或者网站导航。这里我们讨论两种常见的树形菜单结构:SingleTreeNode 和 MultiTreeNode,并且介绍如何将它们相互转换的代码。 首先,...
动态树形目录是Web应用程序中常见的一种交互方式,它允许用户以树状结构查看和操作数据,如文件系统、组织结构或层级关系的数据。在本项目中,"struts2动态树形目录"实现了这一功能,用户可以通过界面动态地创建、...
这个特定的压缩包文件包含了一个实现可搜索下拉树形功能的示例,这在许多Web应用中非常有用,比如用于导航菜单、组织结构展示或者层级数据的交互操作。 在jQuery中,Bootstrap Treeview通过添加特定的CSS样式和...
TreeTable是一种在网页中以树状结构展示数据的表格组件,它将表格和树形视图结合在一起,常用于组织和展示层次结构的数据。在给定的“treeTable(jeesite使用)”压缩包中,我们可以找到一个基于Java Web框架Jeesite...