Jxls 實現帶模板的excle的excel導出

1.建立Excel模板

excel模板.png

  • 1) mployees 是一個 List<Employee> employees
  • 2) mployee 是 employees 的一個對象
  • 3) $employee.name} 對象employee的屬性 name
  • 4) 註釋 jx:area(lastCell="D2") 表示從當前的 A1D2 也就是A1:D22 * 4 範圍內是模板內容
  • 5) 註釋 jx:each(item="employees" var="employee" lastCell="D2") 表示從當前 A2D2A2:D2 部分是 JxlsContext對象(也就是須要填充到excle模板中的數據)中的集合中的對象 Employee 中字段與 ${employee.字段} 匹配的區域

2.Maven (後面會有完整的項目地址)

<!-- jxls -->
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>2.8.1</version>
</dependency>

3.項目目錄結構

我太難了,圖片又雙叒叕上傳失敗了~java

4. application.properties

server.port=8080

5.Employee

package com.zhiyue.study.pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @Description 員工表實體
 * @Project spirng-boot-jxls
 * @Author ZhiYue
 * @Date 2020/5/29 15:43
 */
public class Employee {

    private String name;
    private Date birthDate;
    private BigDecimal payment;
    private BigDecimal bonus;
    
    // setter & getter 省略
}

6.SpringBoot控制器

package com.zhiyue.study;

import com.zhiyue.study.pojo.Employee;
import jdk.nashorn.internal.runtime.logging.Logger;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Description jxls excel 下載
 * @Project spirng-boot-jxls
 * @Author ZhiYue
 * @Date 2020/5/29 17:39
 */
@RestController
public class JxlsController {

    @GetMapping("/export")
    public void jxlsExport(HttpServletRequest request, HttpServletResponse response) throws IOException {
        List<Employee> employees = getEmployees();
        String path = new File("").getAbsolutePath() + "/src/main/resources/aaa.xls";

        // InputStream is = JxlsController.class.getResourceAsStream("aaa.xls"); // TODO 1
        InputStream is = new FileInputStream(path);
        String fileName = URLEncoder.encode("export.xls", "UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        OutputStream os = response.getOutputStream();
        Context context = new Context();
        context.putVar("employees", employees);
        JxlsHelper.getInstance().processTemplate(is, os, context);
        os.flush();
        os.close();
        
    }

    // 數據模擬
    private List<Employee> getEmployees() {
        List<Employee> data = new ArrayList<Employee>(2);
        Employee e1 = new Employee();
        e1.setBirthDate(new Date());
        e1.setBonus(new BigDecimal(200));
        e1.setName("zhiyue");
        e1.setPayment(new BigDecimal(5000));
        Employee e2 = new Employee();
        e2.setBirthDate(new Date());
        e2.setBonus(new BigDecimal(200));
        e2.setName("gengniao");
        e2.setPayment(new BigDecimal(5000));
        data.add(e1);
        data.add(e2);
        return data;
    }
}
注意: TODO 1 處使用 JxlsController.class.getResourceAsStream("aaa.xls") 會出現異常 org.jxls.util.CannotOpenWorkbookException: java.lang.NullPointerException 目前還不知道緣由,但願大佬能指點我

7.SpringBoot啓動類

package com.zhiyue.study;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Description
 * @Project spirng-boot-jxls
 * @Author ZhiYue
 * @Date 2020/5/29 15:31
 */
@SpringBootApplication
public class SampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

8.頁面訪問 : localhost:8080/export

頁面請求結果.png

9.最後一個坑

設置單元格格式.png

  • birthDate 是時間格式,這裏咱們須要 設置他的單元格格式

10.項目地址

https://github.com/gengniao/s...
相關文章
相關標籤/搜索