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

Java生成word文檔的示例詳解

 更新時(shí)間:2022年12月13日 14:32:10   作者:步爾斯特  
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言生成word文檔,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下

目標(biāo)

依賴

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

模版

實(shí)體

實(shí)體類需要和模版內(nèi)的動(dòng)態(tài)字段對(duì)應(yīng)

代碼

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

        /* 假數(shù)據(jù) */
        all.setCode("2022-12-ABC");
        all.setBuyer("步爾斯特航天有限公司");
        String[][] strings = new String[100][5];
        for (int i = 0; i < 100; i++) {
            strings[i] = new String[]{i + "", "黃金", "100", "人民幣", "125"};
        }
        all.setTableArray(strings);

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

        String c = "購(gòu)買方(Buyer): \n" +
                "名稱(Name):" + all.getBuyer() + "\n" +
                "地址(Address):杭州市余杭區(qū)大東路100號(hào)\n" +
                "電話(Tel.):021-20855588\n" +
                "\n" +
                "銷售方(Seller):\n" +
                "名稱(Name):杭州火箭制造有限公司\n" +
                "地址(Address):杭州市余杭區(qū)大東路919號(hào)\n" +
                "電話(Tel.):021-20855553\n" +
                "開戶行(Bank):中國(guó)農(nóng)業(yè)銀行杭州支行\(zhòng)n" +
                "賬號(hào)(Account No.):033270-00873333567";

        // 手繪表格
        // 表頭
        RowRenderData row0 = Rows.of(c, "", "", "", "").textBold().create();
        RowRenderData row1 = Rows.of("序號(hào)", "名稱", "數(shù)量", "貨幣", "價(jià)格").center().create();

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

        RowRenderData row4 = Rows.of("總價(jià):" + totalPrice, "", "", "小寫", 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(0, 4)).
//                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, 2)).
                build();

        TableRenderData table = Tables.of(rowRenderData).mergeRule(rule).create();
        // 數(shù)據(jù)封裝
        all.setTableRenderData(table);
        // 傳入模板模板地址+信息數(shù)據(jù)
        XWPFTemplate template = XWPFTemplate.compile(wordPath + modelName).render(all);
        // 指定下載的文件名--設(shè)置響應(yīng)頭
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("發(fā)票.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生成word文檔的示例詳解的文章就介紹到這了,更多相關(guān)Java生成word文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中@PostConstruct的實(shí)現(xiàn)方法

    Spring中@PostConstruct的實(shí)現(xiàn)方法

    大多數(shù)java程序員都使用過@PostConstruct注解,它的作用就是在Bean初始化完成后執(zhí)行,相當(dāng)于我們常說的init()方法,但是我們看@PostConstruct只有單單的一個(gè)注解,它到底是如何實(shí)現(xiàn)在Bean初始化完成后就被調(diào)用的呢,本文將詳細(xì)給大家介紹一下
    2023-06-06
  • SpringbootJPA分頁(yè) PageRequest過時(shí)的替代方法

    SpringbootJPA分頁(yè) PageRequest過時(shí)的替代方法

    這篇文章主要介紹了SpringbootJPA分頁(yè) PageRequest過時(shí)的替代方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring源碼解析 Bean的實(shí)例化

    Spring源碼解析 Bean的實(shí)例化

    這篇文章主要介紹了Spring源碼解析 Bean的實(shí)例化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹沒具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • IDEA快速搭建jsp項(xiàng)目的圖文教程

    IDEA快速搭建jsp項(xiàng)目的圖文教程

    這篇文章主要介紹了IDEA快速搭建jsp項(xiàng)目的圖文教程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • SpringBoot實(shí)現(xiàn)全局異常的封裝和統(tǒng)一處理

    SpringBoot實(shí)現(xiàn)全局異常的封裝和統(tǒng)一處理

    在Spring Boot應(yīng)用中,全局異常的處理是一個(gè)非常重要的方面,本文主要為大家詳細(xì)介紹了如何在Spring Boot中進(jìn)行全局異常的封裝和統(tǒng)一處理,需要的可以參考下
    2023-12-12
  • RocketMQ NameServer 核心源碼解析

    RocketMQ NameServer 核心源碼解析

    這篇文章主要為大家介紹了RocketMQ NameServer 核心源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Java使用dom4j解析xml、讀取xml文件圖文教程

    Java使用dom4j解析xml、讀取xml文件圖文教程

    這篇文章主要給大家介紹了關(guān)于Java使用dom4j解析xml、讀取xml文件的相關(guān)資料,包括創(chuàng)建SAXReader對(duì)象、讀取并解析XML文件、獲取Document對(duì)象、獲取根元素和子元素、獲取屬性和內(nèi)容等操作,還提供了配置Dom4j?jar包的步驟,需要的朋友可以參考下
    2025-02-02
  • 關(guān)于bigDecimal類的精度保留方法

    關(guān)于bigDecimal類的精度保留方法

    這篇文章主要介紹了關(guān)于bigDecimal類的精度保留方法,計(jì)算機(jī)存儲(chǔ)的浮點(diǎn)數(shù)受存儲(chǔ)bit位數(shù)影響,只能保證一定范圍內(nèi)精準(zhǔn),超過bit范圍的只能取近似值,Java使用java.math.BigDecimal專門處理小數(shù)精度,需要的朋友可以參考下
    2023-07-07
  • SpringCache的基本使用方法

    SpringCache的基本使用方法

    Spring?Cache利用了AOP,實(shí)現(xiàn)了基于注解的緩存功能,并且進(jìn)行了合理的抽象,業(yè)務(wù)代碼不用關(guān)心底層是使用了什么緩存框架,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能了,本文介紹SpringCache的基本使用方法,感興趣的朋友一起看看吧
    2024-01-01
  • java多線程編程之使用thread類創(chuàng)建線程

    java多線程編程之使用thread類創(chuàng)建線程

    在Java中創(chuàng)建線程有兩種方法:使用Thread類和使用Runnable接口。在使用Runnable接口時(shí)需要建立一個(gè)Thread實(shí)例
    2014-01-01

最新評(píng)論

长岭县| 阿坝县| 阿拉善右旗| 永和县| 元氏县| 通江县| 紫金县| 原阳县| 西华县| 旅游| 海阳市| 遂昌县| 康平县| 呼伦贝尔市| 临潭县| 梅河口市| 宁德市| 军事| 莒南县| 托克托县| 天柱县| 白山市| 大英县| 阿勒泰市| 米林县| 宿州市| 申扎县| 辽宁省| 东至县| 阜宁县| 永川市| 金溪县| 赤壁市| 崇文区| 永安市| 郯城县| 佳木斯市| 资溪县| 大厂| 宁陵县| 青神县|