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

Java實現(xiàn)導(dǎo)出word表格的示例詳解

 更新時間:2022年12月13日 14:37:52   作者:步爾斯特  
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言導(dǎo)出word表格功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考一下

目標(biāo)

多級表頭、分頁、動態(tài)數(shù)據(jù)

實現(xiàn)

依賴

        <!--  poi工具類-->
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.12.0</version>
        </dependency>

模版

代碼

TableData數(shù)據(jù)(模版對應(yīng)的數(shù)據(jù)對象)

package org.example.bean;


import com.deepoove.poi.data.TableRenderData;
import lombok.Data;


@Data
public class TableData {

    /**
     * 標(biāo)題
     */
    private String title;

    /**
     * 表格
     */
    private TableRenderData table;

    private String[][] tableList;

    /**
     * 總價
     */
    private String totalPrice;

}

核心代碼

package org.example.controller;

import lombok.SneakyThrows;
import org.example.bean.TableData;
import org.springframework.web.bind.annotation.*;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.*;

import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletResponse;

/**
 * Java導(dǎo)出word表格
 * 根據(jù)word模版,手繪表格
 */
@RestController
@RequestMapping(value = "/word")
public class WordController {

    @GetMapping(value = "/table")
    @SneakyThrows
    public void table(TableData tableData, HttpServletResponse response) {

        /* 假數(shù)據(jù) */
        tableData.setTitle("附件1-報價明細(xì)表");
        String[][] strings = new String[100][5];
        for (int i = 0; i < 100; i++) {
            strings[i] = new String[]{"1", "EREWHON", "生豬", "酒鬼酒", "125"};
        }
        tableData.setTableList(strings);

        // 模版路徑
        String wordPath = "/Users/issavior/java/java/seckill-redis/test/src/main/resources/";
        String modelName = "表格.docx";

        // 手繪表格
        // 表頭
        RowRenderData row0 = Rows.of("項號", "編號", "種類", "", "價格").center().create();
        RowRenderData row1 = Rows.of("項號", "編號", "期貨", "股票", "價格").center().create();

        int length = 0;
        if (tableData.getTableList() != null) {
            length = tableData.getTableList().length;
        }
        // 表格數(shù)據(jù) 加上2行表頭 再加上最后一行總價
        RowRenderData[] rowRenderData = new RowRenderData[length + 3];
        rowRenderData[0] = row0;
        rowRenderData[1] = row1;
        // 計算價錢
        BigDecimal totalPrice = new BigDecimal("0");
        for (int i = 0; i < length; i++) {
            rowRenderData[i + 2] = Rows.of(tableData.getTableList()[i]).center().create();
            String s = tableData.getTableList()[i][4];
            BigDecimal bigDecimal = new BigDecimal(s);
            totalPrice = totalPrice.add(bigDecimal);
        }

        RowRenderData row4 = Rows.of("總價", "", "", "", totalPrice.toString()).center().create();
        rowRenderData[rowRenderData.length - 1] = row4;
        // 表格合并,根據(jù)坐標(biāo)
        MergeCellRule rule = MergeCellRule.builder().map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(1, 0)).
                map(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(1, 1)).
                map(MergeCellRule.Grid.of(0, 2), MergeCellRule.Grid.of(0, 3)).
                map(MergeCellRule.Grid.of(0, 4), MergeCellRule.Grid.of(1, 4)).
                map(MergeCellRule.Grid.of(rowRenderData.length - 1, 0), MergeCellRule.Grid.of(rowRenderData.length - 1, 3)).
                build();

        TableRenderData table = Tables.of(rowRenderData).mergeRule(rule).create();
        // 數(shù)據(jù)封裝
        tableData.setTable(table);
        // 傳入模板模板地址+信息數(shù)據(jù)
        XWPFTemplate template = XWPFTemplate.compile(wordPath + modelName).render(tableData);
        // 指定下載的文件名--設(shè)置響應(yīng)頭
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("附件1-報價明細(xì)表.docx", "UTF-8"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        try {
            OutputStream out = response.getOutputStream();
            BufferedOutputStream bos = new BufferedOutputStream(out);
            template.write(out);
            bos.flush();
            out.flush();
            template.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

到此這篇關(guān)于Java實現(xiàn)導(dǎo)出word表格的示例詳解的文章就介紹到這了,更多相關(guān)Java導(dǎo)出word表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Spring配置中的classpath:與classpath*:的區(qū)別

    淺析Spring配置中的classpath:與classpath*:的區(qū)別

    這篇文章主要介紹了Spring配置中的"classpath:"與"classpath*:"的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • java安全之CommonsCollections4詳解

    java安全之CommonsCollections4詳解

    這篇文章主要介紹了java安全之CommonsCollections4詳解
    2022-08-08
  • 如何通過zuul添加或修改請求參數(shù)

    如何通過zuul添加或修改請求參數(shù)

    這篇文章主要介紹了如何通過zuul添加或修改請求參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺談java對象結(jié)構(gòu) 對象頭 Markword

    淺談java對象結(jié)構(gòu) 對象頭 Markword

    這篇文章主要介紹了淺談java對象結(jié)構(gòu) 對象頭 Markword,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java中File類方法詳解以及實踐

    Java中File類方法詳解以及實踐

    Java File類的功能非常強大,利用java基本上可以對文件進行所有操作,下面這篇文章主要給大家介紹了關(guān)于Java中File類方法以及實踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • springboot項目打成war包部署到tomcat遇到的一些問題

    springboot項目打成war包部署到tomcat遇到的一些問題

    這篇文章主要介紹了springboot項目打成war包部署到tomcat遇到的一些問題,需要的朋友可以參考下
    2017-06-06
  • JAVA基礎(chǔ)之注解與反射的使用方法和場景

    JAVA基礎(chǔ)之注解與反射的使用方法和場景

    這篇文章主要給大家介紹了關(guān)于JAVA基礎(chǔ)之注解與反射的使用方法和場景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • springboot2.0如何通過fastdfs實現(xiàn)文件分布式上傳

    springboot2.0如何通過fastdfs實現(xiàn)文件分布式上傳

    這篇文章主要介紹了springboot2.0如何通過fastdfs實現(xiàn)文件分布式上傳,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java的非對稱加密(RSA、數(shù)字簽名、數(shù)字證書)詳解

    Java的非對稱加密(RSA、數(shù)字簽名、數(shù)字證書)詳解

    這篇文章主要介紹了Java的非對稱加密(RSA、數(shù)字簽名、數(shù)字證書)詳解,非對稱加密:加密、解密使用不同的兩把密鑰,這兩把密鑰成對,一般通信開始時通過非對稱加密將對稱加密的密鑰發(fā)送給另一方,然后雙方通過對稱加密來進行溝通,需要的朋友可以參考下
    2024-01-01
  • 基于JavaBean編輯器讀取peroperties文件的實例

    基于JavaBean編輯器讀取peroperties文件的實例

    下面小編就為大家?guī)硪黄贘avaBean編輯器讀取peroperties文件的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

平湖市| 辽阳县| 同心县| 岳阳市| 兴文县| 乐平市| 闻喜县| 兴宁市| 株洲市| 许昌县| 资溪县| 灵台县| 德化县| 华宁县| 甘泉县| 巴林左旗| 连云港市| 达孜县| 神池县| 蒲城县| 乌苏市| 永兴县| 错那县| 陇南市| 石城县| 龙山县| 浦东新区| 永定县| 永年县| 峨眉山市| 资阳市| 金川县| 永川市| 京山县| 明水县| 达尔| 镇赉县| 马边| 伊川县| 积石山| 和田县|