1. 程式人生 > >JAVA 匯出EXCEL表格 POI

JAVA 匯出EXCEL表格 POI

今天給大家帶來javaweb專案使用poi匯出excel的入門示例,適用於初次接觸的新手。匯出excel分兩步:1、生成一個excel放在工作目錄下,2、把它匯出到本地。

請讀者自行下載所需jar包,如圖:
這裡寫圖片描述
然後將jar包引入
接下來放程式碼。程式碼看起來複雜,其實稍微一分析,so easy!!!

jsp頁面

//第一步,生成excel放在一個目錄裡
//給頁面上一個按鈕新增點選事件
$('#exportBtn').bind('click', function() {
    $.ajax({
        async : true,
        cache : false
, type : 'post', dataType : 'json', data : {}, //url需要自己修改 url : '${ctx}/convert/createExcel', //第二步,把目錄裡的檔案匯出到本地 success : function(result) { if($('#download').length > 0) { //這裡的url也需要自己修改 $('#download').attr('src'
, '${ctx}/convert/down?fileNm=' + result.fileNm); } else { $('body').append($('<iframe id="download" style="display : none" />')); $('#download').attr('src', '${ctx}/convert/down?fileNm=' + result.fileNm); } } }); });

java程式碼(生成excel):

@RequestMapping("/createExcel")
@ResponseBody
public Map<String, Object> createExcel() throws IOException {

    //先來造點資料
    //假設有3列,分別為編號、姓名、年齡
    Map<String, Object> titles = new LinkedHashMap<String, Object>();
    titles.put("id", "編號");
    titles.put("name", "姓名");
    titles.put("age", "年齡");

    //自己編3行資料
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    Map<String, Object> map1 = new HashMap<String, Object>();
    Map<String, Object> map2 = new HashMap<String, Object>();
    Map<String, Object> map3 = new HashMap<String, Object>();

    map1.put("id", "001");
    map1.put("name", "張三");
    map1.put("age", "29");
    list.add(map1);

    map2.put("id", "002");
    map2.put("name", "李四");
    map2.put("age", "26");
    list.add(map2);

    map3.put("id", "003");
    map3.put("name", "王五");
    map3.put("age", "25");
    list.add(map3);

    //生成excel正式開始
    //匯出excel最基本物件
    HSSFWorkbook book = new HSSFWorkbook();
    //sheet頁物件
    HSSFSheet sheet = (HSSFSheet)book.createSheet("sheet頁名稱");
    //單元格格式物件
    HSSFCellStyle style = book.createCellStyle();

    //設定一下上下左右的格式
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    style.setBorderRight(HSSFCellStyle.BORDER_THIN);

    int rowNum = 0;//行序號,從第0行開始
    int colNum = 0;//列序號,從第0行開始

    //行物件,代指某一行
    Row row = sheet.createRow(rowNum);
    //單元格物件
    Cell cell = null;

    for(String key : titles.keySet()) {
        //建立一個單元格
        cell = row.createCell(colNum);
        //給單元格寫資料
        cell.setCellValue(titles.get(key).toString());
        //設定一下風格
        cell.setCellStyle(style);
        //設定行高
        row.setHeightInPoints(20);
        //換到下一個單元格(同一行的下一列)
        colNum++;
    }
    //換行
    rowNum++;
    //回到第0列
    colNum = 0;

    //寫資料,同寫標題,同上
    for(int i = 0;i < list.size();i++) {
        Map<String, Object> data = list.get(i);
        row = sheet.createRow(rowNum);
        for(String key : titles.keySet()) {
            cell = row.createCell(colNum);
            cell.setCellValue(data.get(key).toString());
            cell.setCellStyle(style);
            row.setHeightInPoints(20);
            //設定一下列寬
            sheet.setColumnWidth(colNum,  data.get(key).toString().getBytes().length * 2 * 256);
            colNum++;
        }
        rowNum++;
        colNum=0;
    }

    //生成檔案
    Map<String, Object> result = new HashMap<String, Object>();

    //注意轉義,或者用File.separator
    //必須找一個web下的某一個路徑,不然報錯
    String fileNm = "C:\\study\\eclipse\\workspace\\spring_poi\\WebContent\\1.xlsx";
    result.put("fileNm", fileNm);
    OutputStream out =  new FileOutputStream(fileNm);
    book.write(out);
    return result;
}

java程式碼(下載excel):

//單純的檔案下載,讀者也可以自己寫一個
@RequestMapping("/down")
public void down(HttpServletResponse response, String fileNm) throws IOException {
    File file = new File(fileNm);
    String finalNm = "final.xlsx";
    response.setContentType("text/html;charset=UTF-8");
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    long fileLength = file.length();
    response.setContentType("application/octet-stream");
    response.setHeader("Content-disposition", "attachment; filename="
            + new String(finalNm.getBytes("gbk"), "ISO8859-1") );
    response.setHeader("Content-Length", String.valueOf(fileLength));
    bis = new BufferedInputStream(new FileInputStream(file));
    bos = new BufferedOutputStream(response.getOutputStream());
    byte[] buff = new byte[2048];
    int bytesRead;
    while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
        bos.write(buff, 0, bytesRead);
    }
    bis.close();
    bos.close();
}

然後是測試效果
這裡寫圖片描述
(好土。。。)

點選“匯出”。。。
就可以下載excel了。

這裡寫圖片描述

還是很土。。。