使用XLSTransformer生成报表的步骤和流程[通俗易懂]

使用XLSTransformer生成报表的步骤和流程[通俗易懂]使用XLSTransformer生成报表的步骤和流程:1,查询数据库记录,获得需要导出到execl中的数据;2,把数据封装到List中; 通常我们是这样做的:Listbusiness=newArrayListObject>();3,将List放到HashMap中;通常我们是这样做的:Mapbeans=newHashMap();busine

大家好,又见面了,我是你们的朋友全栈君。


使用XLSTransformer生成XLS报表的步骤和流程:

需要引入的jar包:

jxls-core-0.9.7.jar

jxls-reader-0.9.7.jar

poi-3.6.jar

commons-jexl-1.1.jar

commons-digester-2.0.jar

commons-beanutil-core-1.8.3.jar

commons-collection.jar


示例代码:

import java.io.IOException;  
import java.net.URL;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
import net.sf.jxls.exception.ParsePropertyException;  
import net.sf.jxls.transformer.XLSTransformer;  

1,查询数据库记录,获得需要导出到execl中的数据;
2,把数据封装到List中; 

通常我们是这样做的:List<Object> business = new ArrayList<Object>();


3,将List放到HashMap中;

通常我们是这样做的:

Map<String, Object> beans = new HashMap<String, Object>();

business.add(businessCharge);


4,xls模板文件路径;   //这个需要开发者提供,放在项目的某个目录下

我们如果需要生成execl报表文件,需要先设置好一个报表模板,如下图所示:

使用XLSTransformer生成报表的步骤和流程[通俗易懂]


说明:

    a,<jx:forEach items=”$Entity” var=”entity”></jx:forEach>,迭代标签,迭代输出所有的记录;

    b,Entity = 封装记录的对象,如果是单表查询,就是实体类;如果是多表查询,就是封装查询结果的对象,可以看作是一个新的实体类。

    c,entity = 别名

    d,entity.id = 实体类中的id字段


5,生成的目标文件路径; //目标文件路径:可以是本地的E盘上等等


6,创建目标文件夹;FileUtil.makeDir(“生成的目标报表的路径,注意,这里没有文件名”);

if(!FileUtil.isFileExists("目标文件路径 + 目标文件名称")){
	FileUtil.makeDir("目标文件路径");	
}

7,创建XLSTransformer 对象,调用transformer.transformXLS(templatePath, beans, reportPath),生成报表。

以上就是使用XLSTransformer生成报表的大概流程。难点在于数据的获取,例如些SQL语句,检查获得的报表的数据的完整性,准确性,安全性等。生成报表使用的最多的就是存储过程了,所以掌握生成报表的技术,我们需要先掌握存储过程的知识。


如果需要生成TXT报表,则可以这样进行:

/**
 *  生成txt报表/txt报表 
 */
public void generateTxtReport() {
	String reportDate = "2016-03-05";
	Map<String, Object> map = new HashMap<String, Object>();
	map.put("reportDate", reportDate);

	BigDecimal payAmtCount = new BigDecimal(0);
	String reportPath = "report.txt";
	PrintWriter printWriter = null;
	try {
		printWriter = new PrintWriter(reportPath, "GBK");
		printWriter.printf("%-32s\r\n", "XXX明细报表(TXT)");
		// 查询报表数据
		List<Map<String, Object>> Entitylist = null; //从数据库查询出来的数据可以直接封装在这个list中 Entitylist
		List<Map<String, Object>> listNew;
		BigDecimal payAmtVendorCount;
		for (Map<String, Object> EntityInfo : Entitylist) {
			map.put("Id", EntityInfo.get("ID"));
			listNew = null; //从数据库中查询出来的数据

			// 输出数据到TXT报表
			if (!listNew.isEmpty()) {
				printWriter.printf("%-50s\r\n", EntityInfo.get("ID"));
				printWriter.printf("%-100s\r\n", EntityInfo.get("NAME"));
				printWriter.printf("总金额");// 表头
				printWriter.printf("%-150s\r\n","-----------------------------------------------------------");

				payAmtCount = new BigDecimal(0);

				for (Map<String, Object> value : listNew) {
					payAmtCount = payAmtVendorCount.add((BigDecimal) value.get(AMT));

					// 循环统计商户数据
					payAmtCount = payAmtCount.add((BigDecimal) value.get(AMT));

					// 打印数据
					printWriter.printf("XXXX");
				}
				// 单个商户合计打印
				printWriter.printf("%-150s\r\n","-----------------------------------------------------------");
				printWriter.printf("%-20s%\r\n", "合计:", "交易笔数:" + listNew.size(), "", payAmtCount);
				printWriter.printf("%1s\r\n", " ");// 空行
				try {
					printWriter.flush();
				} 
				catch (Exception e) {
				}
			}
		}
		printWriter.printf("%-50s\r\n", "总合计:");
		printWriter.printf("%-15s\r\n", "-----------------------------------------------------------");
		printWriter.printf("%-10s%\r\n", "总交易笔数");
		printWriter.printf("%-15s%\r\n", payAmtCount);
		printWriter.printf("%-15s\r\n", "-----------------------------------------------------------");
	} catch (Exception e) {
		log.error("Export txt fail", e);
	} finally {
		try {
			printWriter.flush();
			printWriter.close();
		} catch (Exception e) {
			log.error("IO txt fail", e);
		}
	}
}

接着会继续分享报表方面的经验。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163871.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Elasticsearch数据库

    Elasticsearch数据库1、什么是Elasticsearch1、概念以及特点        1、Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库。是一个接近实时的搜索平台,从索引这个文档到这个文档能够被搜索到只有一个轻微的延迟,企业应用定位:采用RestfulAPI标准的可扩展和高可用的实时数据分析的全文搜索工具。   2、可拓展:支持一主多从且扩容简易,只要clust…

    2022年6月14日
    42
  • GridView利用CheckBox复选框列实现单选功能

    GridView利用CheckBox复选框列实现单选功能自Dev13.2开始,GridView提供了自带的复选框列,该功能能实现多选操作,方便了不少,那如果想把这个自带的复选框列做成单选,那就需要单独处理了。先补充一下,GridView的复选框列怎么设置,如下代码片段,只要设置前面两个属性即可在GridView看到有一列复选框(BandedGridView较老版本不支持这个功能,应该得在19.2或者20之后的版本才支持,具体可以看看自己的版本,如果设置无效,那么说明不支持)://设置显示复选框列gridview.Option

    2022年5月7日
    84
  • 【Spring】总结Spring整合Mybatis的底层原理实现步骤[通俗易懂]

    【Spring】总结Spring整合Mybatis的底层原理实现步骤[通俗易懂]SpringMyBatisDao:数据访问层,提供让Service层调用的接口,更大的时候,Dao层可以是一个项目。sqlSession.getMapper();使用的是JDK的动态代理使用时自定注入的条件:要被Spring管理。被Spring管理的对象叫做Bean对象和Bean的区别:@Component注解表示将生成一个BeanBean就是一个Java对象,是Spring…

    2022年5月18日
    38
  • linux top命令 详解「建议收藏」

    linux top命令 详解「建议收藏」top命令主要用来观察和收集运行在系统上的进程的一些有用信息。ps只是一个快照,是ps命令执行的那一瞬间的系统中进程的快照。top则可以用于持续观察。第一步,在命令行键入top,回车进入top管理界面。第一行其实和uptime的执行效果是一样的。分析一下,12:48:06是当前运行这个命令的时候,机器的时间。up134days,19:36,指的是说这台机器,持续运行了134天了,启动于134天前的19:36。5users代表的是当前运行这个命令的时候,这台机器上总共登陆有5个用

    2022年9月24日
    3
  • linux安装mysql8.0.16_mysql安装配置教程

    linux安装mysql8.0.16_mysql安装配置教程1.在/use/local下创建mysql文件夹mkdirmysql2.切换到mysql文件夹下cdmysql3.下载mysqlwgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz也可以直接在官方下载最新版本https://dev.mysql.com/downloads/mysql/选择linux4.解压mysqltar-zx……..

    2022年10月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号