最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel的實現(xiàn)方法

 更新時間:2022年03月10日 15:40:48   作者:怪咖軟妹@  
這篇文章主要介紹了SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel,本篇示例當(dāng)中不僅僅有后端,而且還提供了前端html,html當(dāng)中利用js將后端 輸出流直接下載為文件,需要的朋友可以參考下

導(dǎo)出Excel的框架有很多種,POI相對來說比較老了,很多Excel框架底層都是POI、有EasyPoi、EasyExcel、包括Hutool當(dāng)中封裝的也是POI。唯一不同的是Hutool工具包不局限與做Excel、他里面封裝了大量的util,一般現(xiàn)在開發(fā)都會用到糊涂。

本篇示例當(dāng)中不僅僅有后端,而且還提供了前端html,html當(dāng)中利用js將后端 輸出流直接下載為文件。

實現(xiàn)的效果如下:一點擊導(dǎo)出文件直接下載到本地。應(yīng)該現(xiàn)在導(dǎo)出普遍都是這樣。

1、引入依賴

這里用到了lombok,就是簡化實體類當(dāng)中的get、set方法的。

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 導(dǎo)出重要依賴|截止2022-03-09 hutool和poi-ooxml依賴是最新的 -->
<!--POI組件 設(shè)置字體樣式-->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.2.1</version>
</dependency>
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.7.22</version>
</dependency>

2、創(chuàng)建實體類

用于導(dǎo)出測試使用。

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
    private String sex;

}

3、創(chuàng)建導(dǎo)出接口

導(dǎo)出主要是圍繞ExcelWriter類來進(jìn)行開發(fā)的。

hutool在線api:https://apidoc.gitee.com/dromara/hutool/

我大概看了一眼,根據(jù)api其實任何復(fù)雜的Excel導(dǎo)出都可以做出來,API可以設(shè)置指定單元格樣式字體、還有指定行的樣式字體、合并單元格等等…

在這里插入圖片描述

import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.gzl.cn.hutoolexcel.domain.User;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;

@Controller
@RequestMapping("/test")
public class TestController {

    /**
     * 導(dǎo)出測試
     *
     * @param response
     * @param startDate
     * @param endDate
     */
    @PostMapping("/export")
    public void export2(HttpServletResponse response, String startDate, String endDate) {
        List<User> list = data();

        // 1.創(chuàng)建ExcelWriter
        // 通過工具類創(chuàng)建writer,默認(rèn)創(chuàng)建xls格式
        ExcelWriter excelWriter = ExcelUtil.getWriter();
        //創(chuàng)建xlsx格式的
        //ExcelWriter writer = ExcelUtil.getWriter(true);

        // 2.設(shè)置一級標(biāo)題
        // 合并單元格后的標(biāo)題行,使用默認(rèn)標(biāo)題樣式,從0開始
        excelWriter.merge(2, "學(xué)生記錄");
        // 設(shè)置表頭高度
        excelWriter.setRowHeight(0, 25);

        // 3.設(shè)置二級標(biāo)題
        excelWriter.addHeaderAlias("name", "姓名");
        excelWriter.addHeaderAlias("age", "年齡");
        excelWriter.addHeaderAlias("sex", "性別");

        // 4.設(shè)置表頭字體
        // 獲取表頭樣式,獲取樣式后可自定義樣式
        CellStyle headCellStyle = excelWriter.getHeadCellStyle();
        // 獲取單元格樣式
//        CellStyle cellStyle = excelWriter.getCellStyle();
        // 設(shè)置內(nèi)容字體
        Font font = excelWriter.createFont();
        // 設(shè)置字體
        font.setFontName("宋體");
        // 設(shè)置字體大小
        font.setFontHeightInPoints((short) 14);
        // 字體加粗
        font.setBold(true);
        // 字體顏色
        font.setColor(Font.SS_NONE);
        headCellStyle.setFont(font);

        // 5.設(shè)置單元格寬度
        int[] arr = {30, 30, 25};
        for (int i = 0; i < arr.length; i++) {
            excelWriter.setColumnWidth(i, arr[i]);
        }

        // 只導(dǎo)出有別名的字段
        excelWriter.setOnlyAlias(true);
        // 一次性寫出內(nèi)容,使用默認(rèn)樣式,強(qiáng)制輸出標(biāo)題
        excelWriter.write(list, true);
        // 從第幾行寫入
//        excelWriter.setCurrentRow(1);
//        excelWriter.writeRow(data());
        // 設(shè)置某個單元格的樣式
//        CellStyle orCreateCellStyle = excelWriter.getOrCreateCellStyle(0, 1);
        // 設(shè)置某行的樣式
//        excelWriter.setRowStyle();

        try {
            String fileName = URLEncoder.encode("統(tǒng)計" + startDate + "日到" + endDate + "日", StandardCharsets.UTF_8.name());
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            // 將Excel Workbook刷出到輸出流
            excelWriter.flush(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件寫入失??!");
        }
        //關(guān)閉流
        excelWriter.close();
    }

    /**
     * 構(gòu)造 導(dǎo)出的數(shù)據(jù)
     *
     * @return
     */
    public List<User> data() {
        List<User> users = new ArrayList<>();
        users.add(new User("張三", 2, "男"));
        users.add(new User("李四", 2, "女"));
        return users;
    }
}

4、創(chuàng)建html

在templates下創(chuàng)建index.html,這樣啟動項目后直接訪問8080端口,他會直接調(diào)到index.html。

在這里插入圖片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script>
</head>
<body>
<input type="button" id="clickme" value="導(dǎo)出"/>
</body>
<script type="text/javascript">
    function postExcelFile(params, url) { //params是post請求需要的參數(shù),url是請求url地址
        var form = document.createElement("form");
        form.style.display = 'none';
        form.action = url;
        form.method = "post";
        document.body.appendChild(form);

        for (var key in params) {
            var input = document.createElement("input");
            input.type = "hidden";
            input.name = key;
            input.value = params[key];
            form.appendChild(input);
        }

        form.submit();
        form.remove();
    }

    //點擊導(dǎo)出按鈕導(dǎo)出excel表格
    clickme.onclick = function () {
        var params = {};
        params.startDate = '2022-01-01';
        params.endDate = '2022-03-03';
        postExcelFile(params, "/test/export");
    }

</script>
</html>

5、測試導(dǎo)出

在這里插入圖片描述

到此這篇關(guān)于SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel的文章就介紹到這了,更多相關(guān)SpringBoot導(dǎo)出Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的Fork/Join框架使用詳解

    Java中的Fork/Join框架使用詳解

    這篇文章主要介紹了Java中的Fork/Join框架使用詳解,Fork/Join?框架:就是在必要的情況下,將一個大任務(wù),進(jìn)行<BR>拆分(fork)成若干個小任務(wù)(拆到不可再拆時),再將一個個<BR>的小任務(wù)運算的結(jié)果進(jìn)行?join?匯總,需要的朋友可以參考下
    2024-01-01
  • Java中AIO、BIO、NIO應(yīng)用場景及區(qū)別

    Java中AIO、BIO、NIO應(yīng)用場景及區(qū)別

    本文主要介紹了Java中AIO、BIO、NIO應(yīng)用場景及區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java中url任意跳轉(zhuǎn)漏洞的解決

    java中url任意跳轉(zhuǎn)漏洞的解決

    URL任意跳轉(zhuǎn)漏洞是一種安全漏洞,它發(fā)生在應(yīng)用程序沒有正確地驗證目標(biāo)URL,允許攻擊者將用戶重定向到惡意網(wǎng)站,本文就來介紹一下漏洞的解決修復(fù)方案,感興趣的可以了解一下
    2024-06-06
  • SpringBoot設(shè)置首頁(默認(rèn)頁)跳轉(zhuǎn)功能的實現(xiàn)方案

    SpringBoot設(shè)置首頁(默認(rèn)頁)跳轉(zhuǎn)功能的實現(xiàn)方案

    這篇文章主要介紹了SpringBoot設(shè)置首頁(默認(rèn)頁)跳轉(zhuǎn)功能,本文通過兩種方案,給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 學(xué)習(xí)Java之Java中的異常處理機(jī)制詳解

    學(xué)習(xí)Java之Java中的異常處理機(jī)制詳解

    在本文中,小編將帶領(lǐng)大家來學(xué)習(xí)Java的異常處理機(jī)制,包括異常機(jī)制、異常類型、如何捕獲異常、如何拋出異常以及如何創(chuàng)建自定義異常等核心內(nèi)容,感興趣的同學(xué)跟著小編一起來看看吧
    2023-08-08
  • springboot?vue前后端接口測試樹結(jié)點添加功能

    springboot?vue前后端接口測試樹結(jié)點添加功能

    這篇文章主要為大家介紹了springboot?vue前后端接口測試樹結(jié)點添加功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Springboot啟動流程詳細(xì)分析

    Springboot啟動流程詳細(xì)分析

    這篇文章主要介紹了SpringBoot啟動過程的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • SpringBoot中使用websocket出現(xiàn)404的解決方法

    SpringBoot中使用websocket出現(xiàn)404的解決方法

    在Springboot中使用websocket時,本地開發(fā)環(huán)境可以正常運行,但部署到服務(wù)器環(huán)境出現(xiàn)404問題,所以本文小編講給大家詳細(xì)介紹一下SpringBoot中使用websocket出現(xiàn)404的解決方法,需要的朋友可以參考下
    2023-09-09
  • Java線程池7個參數(shù)的詳細(xì)含義

    Java線程池7個參數(shù)的詳細(xì)含義

    java多線程開發(fā)時,常常用到線程池技術(shù),這篇文章是對創(chuàng)建java線程池時的七個參數(shù)的詳細(xì)解釋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Mybatis接口式編程的原理

    Mybatis接口式編程的原理

    mybatis有兩種實現(xiàn)方式,一種可以通過xml配置文件實現(xiàn),其二是面向接口編程的實現(xiàn)。本文重點給大家介紹mybatis接口編程的原理,需要的的朋友參考下
    2017-03-03

最新評論

武城县| 宝鸡市| 西林县| 靖边县| 兴仁县| 崇仁县| 丹棱县| 靖安县| 乌审旗| 偃师市| 监利县| 衡水市| 青岛市| 郧西县| 始兴县| 东安县| 新津县| 那坡县| 宣恩县| 石河子市| 贵溪市| 茶陵县| 习水县| 资中县| 汕头市| 奉新县| 永嘉县| 科技| 呼和浩特市| 西城区| 河西区| 大英县| 霞浦县| 禹州市| 湖南省| 铁岭市| 南华县| 武义县| 酒泉市| 新泰市| 密山市|