`
springdawn2003
  • 浏览: 1189 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

快速报表开发框架

阅读更多

(一) 前言
我们已经有很多写excel报表框架,很有名气象POI、JXL等。但是,写报表依然需要写很多代码才能生成一张复杂的报表。那么,有没有快速简单的办法呢?例如几行代码搞定一张报表输出?例如5行代码输出一张报表:
OutputHelper outputHelper = OutputHelperFactory.getOutputHelper(templateFileName, templateNames);
BeanMapping mapping = outputHelper.getTemplateManager().createBeanMappingFromExcel("template", "Customer",Customer.class);
outputHelper.writeData("Output", new InitCustomerData().getCustomers(), mapping);
outputHelper.getCurrentWorkbook().clearTemplateSheet(templateNames);
outputHelper.getCurrentWorkbook().save("c://fasterreports/BeanHorizontalOutput.xls");

那去这里看看吧:http://sourceforge.net/projects/fasterexcel

(二) 快速开发案例
1) 输出一个简单bean的列表
 步骤1:定义类

public class Customer {

	private static final long serialVersionUID = 0;
	private String id;
	private String code;
	private String name;

	public String getId() {
		return id;
	}

	public String getCode() {
		return code;
	}

	public String getName() {
		return name;
	}

	public void setId(String id) {
		this.id = id;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public void setName(String name) {
		this.name = name;
	}

…
}

 步骤2:为这个输出创建一个excel模板
String fileName = "c://fasterreports/QuickStartTemplate.xls";
TemplateManager templateManager = new TemplateManager();
templateManager.createBeanTemplateStyle(fileName, Customer.class);

输出的QuickStartTemplate.xls文件的Customer单元格:
code style styleSample
email style styleSample
entityAction style styleSample
fax style styleSample
id style styleSample
name style styleSample
你可以调整需要输出的顺序,删除一些不需要输出的字段,例如id/ entityAction是报表不需要的,还可以在styleSample调整输出的字体颜色、大小或者是其他自定义的样式。

输出的QuickStartTemplate.xls文件的template单元格:
DefaultApplyStyleBy variable byFieldName
DefaultBeanWriteDirection variable VERTICAL
DefaultStartRowNumber variable 1
DefaultStartColumnNumber variable 0
DefaultBeanWriteDirection表示打印方向是水平输出还是垂直方向输出;
DefaultStartRowNumber表示从哪一行开始输出;
DefaultStartColumnNumber表示从哪一列开始输出;
输出样式文件参考:
调整后的样式文件参考:

 步骤3:获得数据集

public List<Customer> getCustomers() {

		List<Customer> result = new ArrayList<Customer>();

		for (int i = 1; i < 100; i++) {
			Customer customer = new Customer();
			customer.setId("id" + i);
			customer.setCode("code" + i);
			customer.setName("name" + i);
			customer.setEmail("email" + i);
			customer.setFax("fax" + i);
			result.add(customer);
		}

		return result;
	}
在真实的项目中,这个部分通过查询数据库来获得。

 步骤4:输出数据集
// the template excel,which is create by step1.
String templateFileName = "c://fasterreports/QuickStartTemplate.xls";
String[] templateNames = new String[]{"template", "Customer"};

try {
			// two template sheet:"template","Customer"
OutputHelper outputHelper = OutputHelperFactory.getOutputHelper(
					templateFileName, templateNames);

BeanMapping mapping = outputHelper.getTemplateManager()
					.createBeanMappingFromExcel("template", "Customer",
							OutputCustomerReport.class);
outputHelper.writeData("Output", new InitCustomerData()
					.getCustomers(), mapping);
	outputHelper.getCurrentWorkbook().clearTemplateSheet(templateNames);
outputHelper.getCurrentWorkbook().save(
					"c://fasterreports/QuickStartOutput.xls");
		} catch (IOException e) {
			e.printStackTrace();
		}

输出结果:
完整的源代码:


2) 输出计算公式

 输出(字段A-字段B),公式跟随行的变化而变化
BeanMapping normalLineBeanMapping = this.templateManager.createBeanMappingFromExcel("template", "Customer",Customer.class);
normalLineBeanMapping.add("profit", new FormulaFieldMapping());
normalLineBeanMapping.getElementMapping("profit").setColumnNumber(7);
normalLineBeanMapping.getElementMapping("profit").setFormula(				"{sale}-{cost}");
输出结果:=F3-G3(其中sale属性是在F列,cost属性在G列)
解析:BeanMapping是Customer数据集到excel单元格的样式映射类,定义了Customer类有哪些属性需要输出,输出的方向和每个属性对应到excel单元的哪一行或者是哪一列。
normalLineBeanMapping.add("profit", new FormulaFieldMapping())代码段创建了一个计算列,之后配置了它在excel单元的第7列开始输出。

 输出汇总SUM({字段名})
MergedRegionMapping faxRegionMapping = new MergedRegionMapping();
faxRegionMapping.addOnMergedRegion(new AppendTotalLineListener(this.outputCustomerReport));
normalLineBeanMapping.add("fax", faxRegionMapping);
解析:MergedRegionMapping是合并区域样式映射类,如果fax字段的值和上一行的值不同时,自动触发一个MergedRegion事件。AppendTotalLineListener 类实现了MergedRegionListener接口并接受一个MergedRegion事件。
AppendTotalLineListener 类最终调用了如下代码来增加一个汇总行:
List<Customer> result = new ArrayList<Customer>();
// 打印空行
Customer nullReport = new Customer();
result.add(nullReport);
outputHelper.appendDataForBeanStyle(outputContext, nullReport);
该汇总行使用了另外一个样式映射类:
BeanMapping totalLineBeanMapping = this.templateManager.createBeanMappingFromExcel("template", "TotalStyleCustomer",Customer.class);
totalLineBeanMapping.getElementMappings().remove("sale");
totalLineBeanMapping.add("sale", new SUMFormulaFieldMapping());
totalLineBeanMapping.getElementMapping("sale").setFormula(
				"SUM({sale})");

最终输出:
完整源代码:


分享到:
评论

相关推荐

    报表开发框架整理

    ### 报表开发框架整理 #### 一、Wabacus框架详解 Wabacus作为一款专为JavaEE设计的报表开发框架,其核心优势在于极大简化了数据展示、编辑及表单处理等常见任务的开发流程。通过面向声明的开发模式,Wabacus能够...

    NFine快速开发框架.zip

    NFine快速开发框架是一款专为敏捷开发设计的高效、易用的开源框架,它整合了多种先进的技术,旨在简化企业级应用的开发流程,提高开发效率。NFine框架的核心目标是提供一个统一的开发平台,使得开发者能够更快地构建...

    金蝶代码框架报表开发

    金蝶代码框架报表开发 金蝶代码框架报表开发是基于报表框架的开发方式,提供...金蝶代码框架报表开发提供了一个标准的开发方式,帮助开发者快速开发报表应用程序,并提供了许多有用的功能和类,提高了开发效率和质量。

    .Net Core快速开发框架源码

    当时公司要建自己的内部OA系统,同时有CRM相关功能需求,为了快速开发购买的这个快速开发框架,但是基础功能不完全满足我们使用,所以我们在该框架基础上进行了优化和功能扩充; 设计理念真的不错,希望能给同行小...

    NFine快速开发框架C#源码完全开源版 基于ASP.NET MVC+EF6+Bootstrap框架等

    NFine快速开发框架还可能包含了其他组件和服务,如权限管理、工作流引擎、自定义表单设计、报表工具等,这些都为开发者提供了一站式的解决方案。权限管理可以控制不同角色和用户的操作权限,工作流引擎则用于实现...

    winform 快速开发框架 仓库管理系统源码 C#源码 devexpress

    "winform 快速开发框架 仓库管理系统源码 C#源码 devexpress" 这个标题揭示了几个关键知识点: 1. **WinForm**:这是一个基于Windows Forms(WinForm)的应用程序开发环境,是.NET Framework的一部分,用于构建桌面...

    NFine快速开发框架源码

    NFine快速开发框架是一款高效的开发工具,旨在提升开发效率,减少重复工作,让开发者能够更专注于业务逻辑的实现。这款框架基于.NET Framework,利用成熟的技术栈,为中小型企业级应用提供了一个良好的开发基础。 ...

    dwz4j springmvc mybatis企业级快速开发框架

    "dwz4j SpringMVC MyBatis企业级快速开发框架"是一个集成的开发环境,旨在简化Java开发者在企业级项目中的工作流程,特别是对于快速实现业务逻辑的增删改查(CRUD)以及后台管理功能。这个框架结合了三个核心组件:...

    快速开发NFine框架(去后门版本)

    NFine框架是一款高效、便捷的Web应用程序开发框架,特别适合快速构建企业级应用。这个"快速开发NFine框架(去后门版本)"是经过优化,去除了潜在的安全隐患,为开发者提供了一个更加安全可靠的开发环境。它强调的是...

    【基于C#+vue项目源码】快速开发框架Vue.NetCore

    Vue + C#.NetCore前后端分离,不一样的快速开发框架(提供Vue2/Vue3版本) 框架核心 快速开发(基础功能全部由代码生成器生成) 支持前端、后台自定义业务代码扩展,后台提供了大量常用扩展与通用类 前端、后台提供了近...

    winform 快速开发框架 仓库管理系统源码 C#源码

    【标题】"winform 快速开发框架 仓库管理系统源码 C#源码"涉及到的是一个基于C#编程语言的Windows Forms(Winform)应用程序,用于构建仓库管理系统的快速开发框架。这个框架允许开发者快速搭建功能完备的仓库管理...

    mvc5ef高端后台快速开发框架

    总结来说,"mvc5ef高端后台快速开发框架"是一个结合了MVC5、EF、Jquery和Bootstrap等技术的高效开发解决方案,适用于快速构建具备组织架构、权限控制和报表输出等功能的后台应用。通过学习和利用这个框架,开发者...

    NFine快速开发框架

    NFine快速开发框架是一款专为IT开发者设计的高效、便捷的开发工具,旨在简化企业级应用的构建过程,提高开发效率。该框架以其强大的功能、易用性以及高度可定制化的特点,在众多开发框架中脱颖而出。 NFine的核心...

    java报表工具开发详细手册

    JasperReport与iReport是Java报表开发领域的强大工具组合,通过本手册的学习,开发者将能够掌握这些工具的基本操作和高级功能,从而在实际项目中高效地完成报表设计与开发工作。无论是入门还是进阶,这份手册都将是...

    力软Learun敏捷开发框架源码v7.0,开发手册

    总的来说,力软Learun敏捷开发框架以其全面的功能和低代码特性,降低了开发复杂性的门槛,提升了项目的开发速度和质量,对于需要快速构建企业管理系统的IT团队来说,是一个极具价值的开发工具。

Global site tag (gtag.js) - Google Analytics