使用JXLS导出excel文件

JXLS是一款基于Jakarta POI API的Excel报表生成工具,通过简单的模板和标签即可生成复杂的Excel报表。本文介绍了JXLS的主要特性,包括常用的标签如jx:forEach和jx:if,以及集合函数如sum、min、max等。此外,还提供了一个使用示例,展示如何创建Excel模板并利用Java代码生成报表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JXLS简介:

JXLS是基于Jakarta POI API的Excel报表生成工具,可以生成精美的Excel格式报表。它采用标签的方式,类似JSP标签,写一个Excel模板,然后生成报表,非常灵活,简单!

        JXLS软件首页:http://jxls.sourceforge.net/,SVN源码地址:svn://svn.code.sf.net/p/jxls/code。

        使用JXLS生成Excel文件相对较为简单,只需要一个Excel模板和几行代码即可。Excel模板的内容也比较简单,主要是运用标签及集合函数。

        JXLS的标签比较常用的有以下几个:

        (1) jx:forEach,注意大小写,用于迭代,属性有两个,一个是items,一个是var,其作用、含义和用法与jstl一致;

        (2) jx:if,逻辑判断,有一个属性,即test,其作用、含义和用法与jstl一致。

        集合函数有以下几个:

        (1) sum,求和;

        (2) min,取最小;

        (3) max,取最大;

        (4) ave,求均值;

        (5) count,取数量。

        JXLS有一个比较大的优势——你可以先设计好Excel的样式,再插入JXLS的标签,最终生成的Excel跟你的设计一模一样——这与POI不同,POI通常要求我们在Java代码中进行样式和字体的设计。

        JXLS还有一个特点——你可以直接使用Excel自带的函数。


JXLS实际使用:

1.准备excel模板


2.制作导出工具类

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


import net.sf.jxls.exception.ParsePropertyException;
import net.sf.jxls.transformer.Configuration;
import net.sf.jxls.transformer.XLSTransformer;
public class ExportExcelByTemplateUtil {
	public static final String POSTIFIX = ".xls";  
	  
    protected String reportName;  
    protected static Workbook workBook = new HSSFWorkbook();  
    protected Sheet sheet;  
    protected String sheetName;  
    protected static InputStream excelStream; 
    public static InputStream makeReportFromTemplet(String templatePath, Map beans) {  
    	Configuration config = new Configuration();  
        XLSTransformer transformer = new XLSTransformer(config);
        InputStream is = null;  
        try {  
            is = new FileInputStream(templatePath);  
            try {  
            	workBook = transformer.transformXLS(is,beans); 
            } catch (ParsePropertyException e) {  
                e.printStackTrace();  
            } catch (InvalidFormatException e) {  
                e.printStackTrace();  
            }     
            // 产生POI输出流  
            ByteArrayOutputStream os = new ByteArrayOutputStream();  
            workBook.write(os);  
            excelStream = new ByteArrayInputStream(os.toByteArray());  
            is.close();  
        } catch (IOException ie) {  
            ie.printStackTrace();  
        }  
        return excelStream;  
    }  
}



3.导出方法exportExcel()

public String exportExcel() {  
		HttpServletRequest request = ServletActionContext.getRequest();
		Map<String,String> param = new HashMap<String,String>();
		if(StringUtils.isBlank(licencedatestart)&&
				StringUtils.isBlank(licencedateend)){
			//两个时间都是空  则是初次查询
			licencedateend = TimeUtil.currentTime(TimeUtil.WEB_FORMATOR_YMD);
			licencedatestart = TimeUtil.currentTime(TimeUtil.WEB_FORMATOR_YM) +"-01";
		}
		param.put("licencedatestart", licencedatestart);
		param.put("licencedateend", licencedateend);
      //获取需要填充的数据

		List<Map<String,String>> list = statisticalAnalysisService.getCzxEnterLicenceGradeDistributionInfo(param);
		if ( list == null )  return ERROR;  

      // 查出的list集合放入map
		Map<String,List<Map<String,String>>> beans = new HashMap<String,List<Map<String,String>>>();  
		beans.put("excelinfo", list);  
		// 导出文件名
		String templatePath = request.getRealPath("excelTemplate")+File.separator
				+"zizhiDataCenter"+File.separator+"czxEnterLicenceGradeDistribution_template.xls";
		fileName = "承装修试企业许可证等级分布情况"+System.currentTimeMillis()+".xls";  
      // 将数据填充至模板并返回流
	        excelStream  = ExportExcelByTemplateUtil.makeReportFromTemplet(templatePath, beans);  
		if (excelStream == null) {  
			return INPUT;  
		}  
		return "excel";  
	} 
4.导出效果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值