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.导出效果