使用Apache POI(Java)創建docx文檔和表格

1、引入poi 依賴組件

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.0</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>

2、使用

1.引入庫

import org.apache.poi.xwpf.usermodel.*;

2.初始化一個空文件,生成文檔后寫入文件中

public static File createFile() {Filefile = null;try {// 初始化模板文件String path = "./testFile.docx";Path path2 = Paths.get(path);boolean exists = Files.exists(path2);if (exists) {Files.delete(path2);file = new File(path);} else {file = new File(path);}} catch (IOException e) {log.error("初始化file失敗", e.getMessage());}return file;
}

3.創建 XWPFDocument 對象,create段落

XWPFDocument document = new XWPFDocument();
// 創建文檔中的段落
XWPFParagraph paragraph = document.createParagraph();
paragraph .setAlignment(ParagraphAlignment.CENTER); // 對齊方式
XWPFRun run = paragraph .createRun();
// 設置段落屬性
run.setText("這是一段文字,代表一個段落內容!");
run.setBold(true);
run.setFontSize(18);
run.setFontFamily("微軟雅黑");
run.addCarriageReturn();// 增加回車空行
run.setKerning(30);
段落循環創建

4.使用 XWPFDocument 對象創建表格

// 創建表格 n行*m列(創建table 時,會有一個默認一行一列的表格)
XWPFTable table = document.createTable(n, m);
table.setWidth("100%");// 表格所占文檔寬度
// 獲取第一行
XWPFTableRow row = table.getRow(0);// 設置表格標題行
// 標題行,每一列的名稱都放入List中,可以循環設置列標題
List<String> titles = Lists.newArrayList();// 標題行集合
for (int i = 0; i < titles.size(); i++) {XWPFTableCell cell0 = row.getCell(i);cell0.setWidth(width + "%"); // 設置單元格寬度cell0.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); // 設置對齊方式// 單元格的標題假設為一個段落內容,就可以方便設置標題的樣式,字體、大小、顏色等XWPFParagraph paragraph = cell0.addParagraph();paragraph.setAlignment(ParagraphAlignment.CENTER);// 設置對齊方式XWPFRun run = paragraph.createRun();run.setText("這是一個標題");run.setFontSize(16);// 大小run.setBold(true);// 是否加粗run.setFontFamily("方正仿宋");// 字體格式
}
* 或使用簡單方式創建標題行,使用自適應樣式
XWPFTableCell cell = rows.getCell(0);
buildAlignment(cell); // 單元格中的標題內容對齊方式
cell.setWidth("5%"); // 寬度
cell.setText("這也是一個標題");/**
* 設置單元格樣式
* @param cell cell
*/
private static void buildAlignment(XWPFTableCell cell) {CTTcPr cellPr = cell.getCTTc().getTcPr() == null ? cell.getCTTc().addNewTcPr() : cell.getCTTc().getTcPr();if (cellPr.getVAlign() == null) {cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);} else {cellPr.getVAlign().setVal(STVerticalJc.CENTER);}XWPFParagraph paragraph1=cell.getParagraphArray(0);paragraph1.setAlignment(ParagraphAlignment.CENTER);
}

5.將創建的XWPFDocument對象 寫入文件中

FileOutputStream fos= new FileOutputStream(file);
document.write(fos);
fos.close(); // 關閉流增加判斷,不可直接關閉
// docx文件創建結束!

up

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75786.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python cv2 安裝

在Python中安裝opencv-python&#xff08;即OpenCV庫&#xff09;&#xff0c;通常有兩種方法&#xff1a;使用pip命令或通過conda&#xff08;如果你使用的是Anaconda或Miniconda&#xff09;。以下是詳細的步驟&#xff1a; 方法1&#xff1a;使用pip 打開你的命令行界面&am…

讀者、寫者問題優化

#include <stdio.h> #include <time.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #define NUM_READERS 5 #define NUM_WRITERS 5 // 定義信號量和全局變量 sem_t sdata, srcount; int rea…

如何通過前端表格控件實現自動化報表?1

背景 最近伙伴客戶的項目經理遇見一個問題&#xff0c;他們在給甲方做自動化報表工具&#xff0c;項目已經基本做好了&#xff0c;但拿給最終甲方&#xff0c;業務人員不太買賬&#xff0c;項目經理為此也是天天抓狂&#xff0c;沒有想到合適的應對方案。 現階段主要面臨的問…

RabbitMQ 優先級隊列詳解

本文是博主在記錄使用 RabbitMQ 在執行業務時遇到的問題和解決辦法&#xff0c;因此查閱了相關資料并做了以下記載&#xff0c;記錄了優先級隊列的機制和使用要點。 本文為長文&#xff0c;詳細介紹了相關的知識&#xff0c;可作為學習資料看。 文章目錄 一、優先級隊列介紹1、…

代理模式簡述

目錄 一、主要角色 二、類型劃分 三、靜態代理 示例 缺點 四、動態代理 JDK動態代理 示例 缺點 CGLib動態代理 導入依賴 示例 五、Spring AOP 代理模式是一種結構型設計模式&#xff0c;通過代理對象控制對目標對象的訪問&#xff0c;可在不改變目標對象情況下增強…

每日一題——云服務計費問題

云服務計費問題&#xff08;哈希表 排序&#xff09;| 附詳細 C源碼解析 一、題目描述二、輸入描述三、輸出描述四、樣例輸入輸出輸入示例&#xff1a;輸出示例&#xff1a;說明&#xff1a; 五、解題思路分析六、C實現源碼詳解&#xff08;完整&#xff09;七、復雜度分析 一…

【JVM】運行時數據區域

文章目錄 1. 程序計數器補充 2. 虛擬機棧2.1 棧幀1. 局部變量表2. 操作數棧3. 動態鏈接4. 方法返回地址補充 3. 本地方法棧4. 堆5. 方法區靜態常量池&#xff08;Class常量池&#xff09;運行時常量池字符串常量池&#xff08;1&#xff09;位置變化&#xff08;2&#xff09;放…

day28圖像處理OpenCV

文章目錄 一、圖像預處理4 邊緣填充4.1 邊界復制&#xff08;BORDER_REPLICATE&#xff09;4.2 邊界反射&#xff08;BORDER_REFLECT&#xff09;4.3 邊界反射101&#xff08;BORDER_REFLECT_101&#xff09;4.4 邊界常數&#xff08;BORDER_CONSTANT&#xff09;4.5 邊界包裹&…

C++ Json-Rpc框架-3項目實現(2)

一.消息分發Dispatcher實現 Dispatcher 就是“消息分發中樞”&#xff1a;根據消息類型 MType&#xff0c;把消息派發給對應的處理函數&#xff08;Handler&#xff09;執行。 初版&#xff1a; #pragma once #include "net.hpp" #include "message.hpp"n…

C++算法優化實戰:破解性能瓶頸,提升程序效率

C算法優化實戰&#xff1a;破解性能瓶頸&#xff0c;提升程序效率 在現代軟件開發中&#xff0c;算法優化是提升程序性能的關鍵手段之一。無論是在高頻交易系統、實時游戲引擎&#xff0c;還是大數據處理平臺&#xff0c;算法的高效性直接關系到整體系統的性能與響應速度。C作…

【PostgreSQL教程】PostgreSQL 特別篇之 語言接口連接PHP

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

山東大學軟件學院創新項目實訓開發日志(12)之將對話記錄保存到數據庫中

在之前的功能開發中&#xff0c;已經成功將deepseekAPI接口接入到springbootvue項目中&#xff0c;所以下一步的操作是將對話和消息記錄保存到數據庫中 在之前的開發日志中提到數據庫建表&#xff0c;所以在此刻需要用到兩個表&#xff0c;conversation表和message表&#xff…

Spring-注解編程

注解基礎概念 1.什么是注解編程 指的是在類或者方法上加入特定的注解(XXX) 完成特定功能的開發 Component public classXXX{} 2.為什么要講注解編程 1.注解開發方便 代碼簡潔 開發速度大大提高 2.Spring開發潮流 Spring2.x引入注解 Spring3.x完善注解 Springboot普及 推廣注解…

Dify智能體平臺源碼二次開發筆記(5) - 多租戶的SAAS版實現(2)

目錄 前言 用戶的查詢 controller層 添加路由 service層 用戶的添加 controller層 添加路由 service層-添加用戶 service層-添加用戶和租戶關系 驗證結果 結果 前言 完成租戶添加功能后&#xff0c;下一步需要實現租戶下的用戶管理。基礎功能包括&#xff1a;查詢租…

基于若依的ruoyi-vue-plus的nbmade-boot在線表單的設計(一)架構方面的設計

希望大家一起能參與我的新開源項目nbmade-boot: 寧波智能制造低代碼實訓平臺 主要目標是類似設計jeecgboot那樣的online表單功能,因為online本身沒有開源這部分代碼,而我設計這個是完全開源的,所以希望大家支持支持,開源不容易。 1、數據庫方面設計考慮 是在原來gen_table和…

WebFlux應用中獲取x-www-form-urlencoded數據的六種方法

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

[Python基礎速成]1-Python規范與核心語法

本系列旨在快速掌握Python&#xff0c;實現能夠快速閱讀和理解 Python 代碼&#xff0c;并在可查閱語法的情況下進行 AI 學習。 本篇先了解一下Python基礎知識。 本篇內容較菜鳥教程有所刪減、方便快速構建大綱&#xff0c;且加入了PEP 8規范說明等有助于理解和編寫代碼的說明。…

農民劇團的春天與改變之路

楊天義&#xff0c;男&#xff0c;1966年9月生&#xff0c;中共黨員&#xff0c;江西省吉安市吉水縣水南農民劇團團長。 楊天義從廢品收購起家&#xff0c;憑借自身的努力和奮斗&#xff0c;自籌資金100余萬元建設了水南鎮的第一座影劇院&#xff0c;組建了江西省吉安市吉水縣…

python asyncio 的基本使用

1、引言 asyncio 是 Python 標準庫中的一個庫&#xff0c;提供了對異步 I/O 、事件循環、協程和任務等異步編程模型的支持。 asyncio 文檔 2、進程、線程、協程 線程 線程是操作系統調度的基本單位&#xff0c;同一個進程中的多個線程共享相同的內存空間。線程之間的切換由操…

Leedcode刷題 | Day30_貪心算法04

一、學習任務 452. 用最少數量的箭引爆氣球代碼隨想錄435. 無重疊區間763. 劃分字母區間 二、具體題目 1.452用最少數量的箭引爆氣球452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 在二維空間中有許多球形的氣球。對于每個氣球&#xff0c;提供的輸…