java中自定義excel模板並且填充內容


場景

讀取某一份固定的excel模板,根據數據填充進入指定的位置

本地測試時,在本地resources下創建一個存放模板的位置

例:

 

實現

挺簡單的就直接貼代碼吧,不得不吐槽一下博客園的編輯器真的很難用..

@Override
    public void exportDeposit(UserInfo userInfo, Long id, HttpServletRequest request, HttpServletResponse response) throws Exception {
        /*
       業務內容
     */

        // excel模板路徑(分別是本地測試路徑和雲上服務器路徑)
        String file = this.getClass().getClassLoader().getResource("excel/zhck.xls").getFile();
       // String file = "/usr/local/wms_trade/zhck.xls";
        File fi = new File(file);
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi));
        // 讀取excel模板
        HSSFWorkbook wb = new HSSFWorkbook(fs);
        // 讀取了模板內所有sheet內容
        HSSFSheet sheet = wb.getSheetAt(0);
        sheet.setForceFormulaRecalculation(true);
        // 在相應的單元格進行賦值
        // 第11行 第6列,這是部分業務內容,其實和本文關系不大,但是可以用來給需要的人參考,內容是如何填入的,不過我更加建議去參考原生api
        sheet.getRow(3).getCell(3).setCellValue(deposit.getType());
        if (deposit.getGmtDeposit() != null) {
            sheet.getRow(3).getCell(1).setCellValue(deposit.getGmtDeposit().toString());
        }
        sheet.getRow(3).getCell(5).setCellValue(deposit.getDepositNumber());
        sheet.getRow(3).getCell(7).setCellValue(deposit.getCreateName());
        sheet.getRow(4).getCell(1).setCellValue(deposit.getDestination());
      /*
     業務內容
     */
      // 瀏覽器打開下載窗口
        String fileName = deposit.getDepositNumber() + "出庫單.xls";
        response.reset();
        response.setCharacterEncoding("UTF-8");
        // Content-disposition 瀏覽器以下載的形式打開
        String header = request.getHeader("User-Agent").toUpperCase();
        if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
            fileName = URLEncoder.encode(fileName, "utf-8");
            fileName = fileName.replace("+", "%20");
        } else {
            fileName = new String(fileName.getBytes(), "ISO8859-1");
        }
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
        response.setContentType("application/vnd.ms-excel");

        // 直接用數組緩沖輸出流輸出
        wb.write(response.getOutputStream());
       
}

 

 留言

注釋里寫的挺明白的我個人覺得,只要看完應該就可以操作了,

具體的如何填充內容可以直接去搜索HSSFWorkbook,HSSFSheet,HSSFCellStyle,HSSFFont,HSSFRow,HSSFCell等API,

看過一輪就知道怎么使用了,上面也有部分例子可以參考

這個接口寫完以后,已經可以直接用url訪問下載文件了,剩下的就得交給前端了(那塊我就不是很懂了)

如果掛在雲服務器上的話,需要將模板也傳一份到自己制定的目錄,然后將文件路徑更改一下,才能使用

比如:

 

 有更好的辦法歡迎留言

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM