1. 程式人生 > 其它 >Excel工具類分享

Excel工具類分享

用於將資料寫入到excel中並寫回到前端.xls檔案;

使用到的技術:

阿里巴巴開源的 easyExcel,官方文件:EasyExcel · 語雀 (yuque.com);

其餘參考的部落格:(13條訊息) Java使用EasyExcel下載xls、xlsx 出現檔案格式與副檔名不匹配_小肥羊的部落格-CSDN部落格;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.demo.domain.StudentVO;
import org.apache.poi.ss.formula.functions.T; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class ExcelUtils { /** * 使用response,將指定集合中的資料作為excel輸出 * @param response 應該傳入HttpServletResponse,傳入前需要先設定response的返回內容型別和返回頭資訊 * response.setContentType("application/vnd.ms-excel"); * response.setHeader("content-Disposition","attachment;filename=" + "輸出的檔名" +".xls") *
@param list 需要寫到excel中的資料,List<T>中的T需要是個bean,不能使用map,否則資料寫入不成功 * @param voType 將list中的封裝好的bean的位元組碼物件傳送過來,如 StudengVO.class, 如果傳遞有問題,可能會出現沒有表頭的情況; * @throws IOException 將異常丟擲,一旦有問題,會將異常拋給方法的呼叫著; */ public static void responseExcel(HttpServletResponse response, List list, Class voType) throws
Exception { //獲取excelWriter物件,指定將都對應寫到哪裡。 ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build(); //獲取sheet的索引號為0,並將其名稱改為report的sheet WriteSheet sheet = EasyExcel.writerSheet(0,"report").head(voType).build(); //使用Writer物件,向sheet中寫入list ExcelWriter write = excelWriter.write(list, sheet);//關閉excelWriter資源,在其中會關閉response中的流資源很重要 excelWriter.finish(); } }

引數中需要傳遞進去java Bean的class物件,舉例:

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data //lombok外掛
@NoArgsConstructor
@AllArgsConstructor
public class StudentVO {
    @ExcelProperty("姓名") //在這裡定義表頭的名稱,否則會將該bean的屬性名作為該列的表頭名稱
    private String name;
    @ExcelProperty("年齡") //在這裡定義表頭的名稱,否則會將該bean的屬性名作為該列的表頭名稱
   private String age; }

Controller層程式碼舉例:

import com.example.demo.domain.StudentVO;
import com.example.demo.util.ExcelUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;


@Controller
public class testController {

    @GetMapping("/test")
    @ResponseBody
    public void test(HttpServletResponse response){

        try {
       // 模擬資料 List
<StudentVO> list = new ArrayList<>(); StudentVO s1 = new StudentVO("張三","21"); StudentVO s2 = new StudentVO("李四","24"); list.add(s1); list.add(s2);
       //設定響應體的格式 response.setContentType(
"application/vnd.ms-excel"); response.setHeader("content-Disposition","attachment;filename=" + "test.xls");
       //呼叫工具類 進行寫操作 ExcelUtils.responseExcel(response,list,StudentVO.
class); } catch (Exception e) { e.printStackTrace(); } } }

測試所使用到了jar包的地址:

<properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- easyExcel 進行報表匯出-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.6</version>
        </dependency>
        <!-- lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>