创建Excel报表(传入Map对象)

来源:互联网 发布:淘宝装修海报 编辑:程序博客网 时间:2024/04/29 19:41

-------------------------------------------------------------java代码(可以直接copy使用)------------------------------------------------------package com.biz.comm;

import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import jxl.Workbook;
import jxl.write.WritableFont;

/**
 * 生成Excel报表(通用方法)
 *
 * @author amoretto
 *
 */
public class ExcelModel {
 public ExcelModel() {
 }

 public String expordExcel(OutputStream os, Map list, String title,
   String[][] stat) throws Exception {
  jxl.write.WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
  String tmptitle = title; // 标题title
  jxl.write.WritableSheet wsheet = wbook.createSheet("第一页", 0); // sheet名称
  jxl.write.WritableFont wfont = new jxl.write.WritableFont(
    WritableFont.ARIAL, 14, WritableFont.BOLD, false,
    jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
  jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(
    wfont);
  wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
  wcfFC.setAlignment(jxl.format.Alignment.CENTRE);
  wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
  jxl.write.Label wlabel1;
  if (tmptitle != null && !"".equals(tmptitle.trim())) {
   wlabel1 = new jxl.write.Label(0, 0, tmptitle, wcfFC);
   wsheet.addCell(wlabel1);
   wsheet.mergeCells(0, 0, stat.length - 1, 0);// 设置标题的长度和起始位置(1第几列开始(2第几行开始(3占有几列
  }
  wsheet.setRowView(0, 600);// 设置第1行高度
  wsheet.setRowView(1, 400);// 设置第2行高度
  for (int j = 0; j < stat.length; j++) { // 设置每个字段的大小 excel字段从0开始
   wsheet.setColumnView(j, 20);
  }

  wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 12,
    WritableFont.BOLD, false,
    jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
  wcfFC = new jxl.write.WritableCellFormat(wfont);
  wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
  wcfFC.setAlignment(jxl.format.Alignment.CENTRE);
  wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
  jxl.write.Label wlabel;
  for (int j = 0; j < stat.length; j++) { // 记录所有字段
   if (tmptitle == null || "".equals(tmptitle.trim())) {
    wlabel = new jxl.write.Label(j, 0, stat[j][0], wcfFC);
   } else {
    wlabel = new jxl.write.Label(j, 1, stat[j][0], wcfFC);
   }
   wsheet.addCell(wlabel);
  }
  wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 11,
    WritableFont.NO_BOLD, false,
    jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
  wcfFC = new jxl.write.WritableCellFormat(wfont);
  wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
  int i = 2;
  if (tmptitle == null || "".equals(tmptitle.trim())) {
   i = 1;
  } else {
   i = 2;
  }
  Set set = list.keySet();
  for (Iterator iter = set.iterator(); iter.hasNext();) { // 赋值过程
   Object obj = (Object) iter.next();
   Map map = (Map) list.get(obj);
   for (int j = 0; j < stat.length; j++) {
    wlabel = new jxl.write.Label(j, i, map.get(stat[j][1])
      .toString()
      + "", wcfFC);
    wsheet.addCell(wlabel);
   }
   ++i;
  }
  wbook.write(); // 写入文件
  wbook.close();
  if (os != null) {
   os.flush();
  }
  os.close();
  return "success";
 }

 public String expordExcel2(OutputStream os, List list, String title,
   String[] stat) throws Exception {
  jxl.write.WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
  String tmptitle = title; // 标题title
  jxl.write.WritableSheet wsheet = wbook.createSheet("第一页", 0); // sheet名称
  jxl.write.WritableFont wfont = new jxl.write.WritableFont(
    WritableFont.ARIAL, 14, WritableFont.BOLD, false,
    jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
  jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(
    wfont);
  wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
  wcfFC.setAlignment(jxl.format.Alignment.CENTRE);
  wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
  jxl.write.Label wlabel1;
  wlabel1 = new jxl.write.Label(0, 0, tmptitle, wcfFC);
  wsheet.addCell(wlabel1);
  wsheet.mergeCells(0, 0, list.size(), 0);// 设置标题的长度和起始位置(1第几列开始(2第几行开始(3占有几列
  wsheet.setRowView(0, 600);// 设置第1行高度
  wsheet.setRowView(1, 400);// 设置第2行高度
  // for (int j = 0; j <stat.length; j++) { // 设置每个字段的大小 excel字段从0开始
  // wsheet.setColumnView(j, 20);
  // }

  wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 30,
    WritableFont.BOLD, false,
    jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
  wcfFC = new jxl.write.WritableCellFormat(wfont);
  wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
  wcfFC.setAlignment(jxl.format.Alignment.CENTRE);
  wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
  // wcfFC.colspan
  jxl.write.Label wlabel;
  // for (int j = 0; j < stat.length; j++) { // 记录所有字段
  // wlabel = new jxl.write.Label(j, 1, stat[j], wcfFC);
  // wsheet.addCell(wlabel);
  // }
  wcfFC = new jxl.write.WritableCellFormat();
  wcfFC.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
  for (int i = 1; i < stat.length + 1; i++) {
   if (stat[i - 1] != null) {
    wlabel = new jxl.write.Label(0, i, stat[i - 1] + "", wcfFC); // j表示第几列,i表示第几个数
   } else {
    wlabel = new jxl.write.Label(0, i, "" + "", wcfFC); // j表示第几列,i表示第几个数
   }

   wsheet.addCell(wlabel);
  }
  int j = 1;
  String temp = "";
  // int counter = 1;
  int cal = 1;
  int counter = 0;
  for (Iterator iter = list.iterator(); iter.hasNext();) { // 赋值过程
   Object[] obj = (Object[]) iter.next();
   for (int i = 1; i < obj.length + 1; i++) {
    if (i == 1) {
     if ("".equals(temp)) {
      temp = "" + obj[0];
      counter++;
     } else {
      if (temp.equals("" + obj[0])) {
       counter++;
      } else {
       wsheet.mergeCells(cal, 1, cal + counter - 1, 1);
       cal = cal + counter;
       temp = obj[0] + "";
       counter = 1;
      }
     }
    }
    if (obj[i - 1] != null) {
     wlabel = new jxl.write.Label(j, i, obj[i - 1] + "", wcfFC); // j表示第几列,i表示第几个数
    } else {
     wlabel = new jxl.write.Label(j, i, "" + "", wcfFC); // j表示第几列,i表示第几个数
    }
    wsheet.addCell(wlabel);
   }
   ++j;
  }
  // wsheet.mergeCells(1, 1, 2, 1);
  wbook.write(); // 写入文件
  wbook.close();
  if (os != null) {
   os.flush();
  }
  os.close();
  return "success";
 }

}
----------------------------------------------------------jsp代码(需要修改相应属性)------------------------------------------------------------<%@ page language="java" pageEncoding="gbk"%>
<jsp:directive.page import="java.util.Map" />
<jsp:directive.page import="com.biz.comm.ExcelModel" />
<%@ taglib uri="/WEB-INF/taglib/c.tld" prefix="c"%>
<%@taglib uri="/WEB-INF/taglib/DataGridTag.tld" prefix="m"%>
<%@  page import="java.util.*,java.text.SimpleDateFormat"%>
<%
 response.setContentType("application/vnd.ms-excel;charset=GBK");
 SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
 Date date2 = new Date();
 String date1 = formatter.format(date2);
 response.setHeader("Content-Disposition",
   "attachment;filename=ClearingBath" + date1 + ".xls");
%>
<%
 out.clear();
 out = pageContext.pushBody();
 Map map = (Map) request.getAttribute("list");
 ExcelModel em = new ExcelModel();
 String[][] stat = new String[][] { { "中心流水号", "centerFlow" },
   { "交易日期", "tranDate" }, { "清算银行行号", "bankCode" },
   { "结算明细笔数", "cleanCount" }, { "清算结果", "retMsg" },
   { "备注", "remark" } };
 em.expordExcel(response.getOutputStream(), map, "清算结果数据", stat);
%>

 

原创粉丝点击