先前有介绍POI工具导excel,缺点是excel样式控制比较麻烦。现在介绍模板方式导出excel.
这种方式控制控制样式比较好。先来看一个简单模板test_xtl.xls如下:
从上面的模板可以看出,我们需要在后台准备数据ListMap,它是一个Map的key对象名字,引用了一个Map.
excelMap.put("listMap", testDomain);
这里的Map的value就是我们需要的数据对象,它可以是普通的java对象,例如下面例子中引用的对象TestDomain ,
- public class TestDomain {
- private List<Domain> domainList1 ;//sheet1的基础数据
- private List<Domain> domainList2 ;//sheet2的基础数据
- public List<Domain> getDomainList() {
- return DomainList;
- }
- public void setDomainList(
- List<Domain> DomainList) {
- this.DomainList = DomainList;
- }
- public List<Domain> getDomainList2() {
- return DomainList2;
- }
- public void setDomainList2(
- List<Domain> DomainList2) {
- this.DomainList2 = DomainList2;
- }
- }
这里的Domain是个普通的javabean, 4个字段分别是name,c1,c2,remarks.
本文介绍jxl在web应用中的导出功能,下面是主要的代码:
- public void export(){
- HttpServletResponse response = WebContext.getResponse();
- HttpServletRequest request = WebContext.getRequest();
- String basePath = request.getSession().getServletContext().getRealPath("");
- //放置excel模板文件的位置
- basePath = basePath+"/xls_templates/";
- InputStream is = null;
- try {
- is = new BufferedInputStream(new FileInputStream(basePath+"test_xtl.xls"));
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- TestDomain testDomain=getSheetsData();
- //listMap在模板中引用的名字
- Map map=new HashMap();
- excelMap.put("listMap", testDomain);
- //关联模板
- XLSTransformer transformer = new XLSTransformer();
- HSSFWorkbook workBook = transformer.transformXLS(is, excelMap);
- //设置每个sheet的名字
- String []sheetNames={"sheet_name1","sheet_name2"};
- for(int i=0;i<sheetNames.length;i++){
- workBook.setSheetName(i,sheetNames[i],HSSFWorkbook.ENCODING_UTF_16);
- }
- //输出excel
- String filename="abcdef.xls";
- saveWorkbook(workBook,response,filename);
- try {
- is.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private void saveWorkbook(HSSFWorkbook resultWorkbook,HttpServletResponse response,String fileName){
- try{
- response.setHeader("content-disposition", "attachment; filename="+fileName);
- response.setContentType("application/msexcel");
- OutputStream os =response.getOutputStream();
- resultWorkbook.write(os);
- os.flush();
- os.close();
- }catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }