POI:对Word的基本操作

1 向word中写入文本并设置样式

package com.example;

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

import java.io.File;
import java.io.FileOutputStream;

/**
 * @Author:xiexu
 * @Date:2024/1/12 23:54
 */
public class WriteWord {
    static String PATH = "D:\\Idea-projects\\POI_word";
    public static void main(String[] args) throws Exception {
        // 1. 创建文档
        XWPFDocument document = new XWPFDocument();
        // 2. 创建一个标题段落
        XWPFParagraph titleParagraph = document.createParagraph();
        // 设置段落为居中
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);
        // 3. 创建第一段的运行
        XWPFRun titleParagraphRun = titleParagraph.createRun();
        // 4. 设置文本
        titleParagraphRun.setText("这是一个标题");
        // 5. 设置第一个段落中文本样式
        titleParagraphRun.setFontSize(20);
        titleParagraphRun.setBold(true);
        titleParagraphRun.setFontFamily("宋体");
        titleParagraphRun.setColor("FF0000");



        // 6. 创建第二个段落
        XWPFParagraph contentParagraph = document.createParagraph();
        // 设置段落为左对齐
        contentParagraph.setAlignment(ParagraphAlignment.LEFT);
        // 设置首行缩进
        contentParagraph.setIndentationFirstLine(400);
        contentParagraph.setBorderBottom(Borders.BASIC_BLACK_DASHES);  // 加边框(上右下左都可以)
        // 7. 创建第二段的运行
        XWPFRun contentParagraphRun = contentParagraph.createRun();
        // 8. 设置文本 (这边使用StringBuffer来拼接字符,来模拟文章效果)
        StringBuffer content = new StringBuffer();
        for (int i = 0; i < 50; i++) {
            content.append("小蟹学Java-POI");
        }
        contentParagraphRun.setText(content.toString());
        contentParagraphRun.setItalic(true);
        //twoParagraphRun.setStrike(true);  // 删除线
        // contentParagraphRun.setSubscript(VerticalAlign.SUBSCRIPT);  // 下标

        contentParagraphRun.addBreak();  // 添加个换行


        // 9. 创建第三个段落
        XWPFParagraph endParagraph = document.createParagraph();
        // 设置段落为右对齐
        endParagraph.setAlignment(ParagraphAlignment.RIGHT);
        // 10. 创建第三个段的运行
        XWPFRun endParagraphRun = endParagraph.createRun();
        // 11.设置文本
        endParagraphRun.setText("结束");
        endParagraphRun.setFontSize(16);
        endParagraphRun.setColor("8E0500");



        // 创建一个文件对象
        File file = new File(PATH + "\\write_word.docx");
        // 创建一个文件输出流
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        // 通过输出流,将目标文件写入到磁盘
        document.write(fileOutputStream);

        // 关闭输出流
        fileOutputStream.close();

        // 输出提示
        System.out.println("文件创建成功");

    }
}

 

2 创建基础的表格

package com.example;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

/**
 * @Author:xiexu
 * @Date:2024/1/13 10:18
 */
public class WriteTable {
    static String PATH = "D:\\Idea-projects\\POI_word";
    public static void main(String[] args) throws Exception {
        XWPFDocument document = new XWPFDocument();

        // 创建表格
        XWPFTable table = document.createTable();

        // 创建第一行
        XWPFTableRow oneRow = table.getRow(0);
        oneRow.getCell(0).setText("col one, row one");
        oneRow.addNewTableCell().setText("col two, row one");
        oneRow.addNewTableCell().setText("col three, row one");

        // 创建第二行
        XWPFTableRow twoRow = table.createRow();
        twoRow.getCell(0).setText("col one, row two");
        twoRow.getCell(1).setText("col two, row two");
        twoRow.getCell(2).setText("col three, row two");

        // 创建第三行
        XWPFTableRow threeRow = table.createRow();
        threeRow.getCell(0).setText("col one, row three");
        threeRow.getCell(1).setText("col two, row three");
        threeRow.getCell(2).setText("col three, row three");


        File file = new File(PATH + "\\write_table.docx");

        FileOutputStream fileOutputStream = new FileOutputStream(file);

        document.write(fileOutputStream);

        fileOutputStream.close();

        System.out.println("表格写入成功!");
    }
}

 

3 给表格添加样式

 在这边的话,就不用上述的方法创建表格了,直接给出行数和列数也是可以直接创建表格的

package com.example;

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;

import java.io.File;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.util.List;

/**
 * @Author:xiexu
 * @Date:2024/1/13 10:40
 */
public class SetTableStyle {
    static String PATH = "D:\\Idea-projects\\POI_word";
    public static void main(String[] args) throws Exception {
        // 1. 创建一个文档对象
        XWPFDocument document = new XWPFDocument();

        // 2. 给出行数和列数
        int RowNums = 5;
        int colNums = 6;

        // 3.  创建表格对象
        XWPFTable table = document.createTable(RowNums, colNums);

        // 4. 设置表格样式
        // 4.1 获取表格(table)的属性对象(CTTblPr),该对象用于描述表格的一些属性,例如样式、边框等
        CTTblPr tblPr = table.getCTTbl().getTblPr();
        // 4.2创建一个新的表格样式对象(CTString),并将其添加到表格属性对象中
        CTString tblStyle = tblPr.addNewTblStyle();
        // 4.3设置表格样式对象的值为 "TableStyle"
        tblStyle.setVal("TableStyle");


        // 4.4 获取所有的行并设置样式
        List<XWPFTableRow> rows = table.getRows();

        int currentRow = 0;
        int currentCol = 0;

        for (XWPFTableRow row : rows) {
            // 设置行高
            CTTrPr ctTrPr = row.getCtRow().addNewTrPr();
            CTHeight ctHeight = ctTrPr.addNewTrHeight();
            ctHeight.setVal(BigInteger.valueOf(300));

            // 设置单元格样式
            List<XWPFTableCell> cells = row.getTableCells();
            for (XWPFTableCell cell : cells) {
                // 4.5 设置单元格样式
                // 获取单元格(cell)的属性对象(CTTcPr),该对象用于描述单元格的一些属性,例如宽度、边框、垂直对齐方式等。
                CTTcPr ctTcPr = cell.getCTTc().addNewTcPr();
                // 创建一个新的垂直对齐方式对象(CTVerticalJc),并将其添加到单元格属性对象中。
                CTVerticalJc ctVerticalJc = ctTcPr.addNewVAlign();
                // 设置垂直对齐方式对象的值为 "CENTER",将单元格中的内容垂直居中显示
                ctVerticalJc.setVal(STVerticalJc.CENTER);  // 枚举,可以有多种

                // 设置单元格阴影样式
                CTShd ctShd = ctTcPr.addNewShd();
                ctShd.setColor("auto");
                ctShd.setVal(STShd.CLEAR);  // 枚举,可以有多种

                // 头行和内容行的阴影颜色应有区别  (需要定义当前行和当前列的变量)
                if (currentRow == 0) {
                    ctShd.setFill("FFFFCC");
                } else {
                    ctShd.setFill("90EE90");
                }

                // 设置单元格中的内容样式
                XWPFParagraph xwpfParagraph = cell.getParagraphs().get(0);
                XWPFRun cellRun = xwpfParagraph.createRun();

                // 设置居中
                xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);

                // 内容的样式也是需要区分头行和内容行的
                if (currentRow == 0) {
                    cellRun.setFontSize(18);
                    cellRun.setBold(true);
                    cellRun.setColor("FF0000");
                }

                // 设置单元格内容
                if (currentRow == 0) {
                    cellRun.setText("header" + (currentCol+1));
                } else {
                    cellRun.setText("content" + (currentCol+1));
                }

                currentCol++;
            }
            currentCol = 0;   // 一行中的单元格遍历结束后,需要恢复值为0
            currentRow++;
        }

        // 在这边也可以判断路径是否存在, 如果不存在, 则创建路径
        File path = new File(PATH);
        if (!path.exists()) {
            path.mkdirs();
        }

        // 创建文件对象
        File file = new File(PATH + "\\write_tableStyle.docx");
        //  创建输出流
        FileOutputStream fileOutputStream = new FileOutputStream(file);

        document.write(fileOutputStream);

        fileOutputStream.close();

        System.out.println("表格样式设置完成");
    }
}

4 写入图片

package com.example;

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

import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * @Author:xiexu
 * @Date:2024/1/13 11:44
 */
public class Write_img {
    static String PATH = "D:\\Idea-projects\\POI_word";

    public static void main(String[] args) throws Exception {
        // 1. 定义一个图片路径
        String imgPath = "D:\\Idea-projects\\POI_word\\beag.png";

        // 2.  创建一个文件对象
        XWPFDocument document = new XWPFDocument();
        // 3.创建一个段落
        XWPFParagraph paragraph = document.createParagraph();
        //4.创建运行区域
        XWPFRun run = paragraph.createRun();
        // 5.写入图片
        // 将文件路径写入word文档
        run.setText("图片路径:" + imgPath);
        // 换行
        run.addBreak();

        // 增加图片到运行区域
        // 创建一个输入流
        FileInputStream fileInputStream = new FileInputStream(imgPath);
        run.addPicture(fileInputStream, Document.PICTURE_TYPE_PNG, imgPath, Units.toEMU(400), Units.toEMU(250));
        // 第一个参数是输入流、
        // 第二个参数是图片的类型、
        // 第三个参数是图片的路径、
        // 第四个参数是图片的宽度、
        // 第五个参数是图片的高度


        // 6.另起一个页面
        run.addBreak(BreakType.PAGE);

        // 7. 写入到磁盘
        // 创建一个输出流
        FileOutputStream outputStream = new FileOutputStream(PATH + "\\write_img.docx");
        document.write(outputStream);
        outputStream.close();

        System.out.println("图片写入完成");
    }
}


5 读取文档中内容

package com.exampleRead;

import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import java.io.File;
import java.io.FileInputStream;

/**
 * @Author:xiexu
 * @Date:2024/1/13 12:04
 */
public class ReadWord {
    public static void main(String[] args) throws Exception {
        // 找到用读取的目标文件
        File file = new File("D:\\Idea-projects\\POI_word\\write_word.docx");

        // 创建输入流,将文件写入输入流
        FileInputStream fileInputStream = new FileInputStream(file);

        // 创建一个文档对象,将输入流写入文档对象
        XWPFDocument document = new XWPFDocument(fileInputStream);

        // 创建一个文档执行器
        XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(document);

        // 输出文档内容
        String text = xwpfWordExtractor.getText();

        System.out.println(text);

        fileInputStream.close();
    }
}


读取目标文档中其它的属性信息 


 


这些属性信息可以在创建文件的时候,可以设置进去


 

6 读取文档中的图片

package com.exampleRead;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author:xiexu
 * @Date:2024/1/13 12:32
 */
public class Read_img {
    public static void main(String[] args) throws Exception {
        // 定义一个待读取的文件路径
        String filePath = "D:\\Idea-projects\\POI_word\\write_img.docx";

        File Path = new File(filePath);
        // 判断路径是否存在
        if (!Path.exists()) {
            System.out.println("文件不存在");
            return;
        }

        // 创建一个输入流
        FileInputStream fileInputStream = new FileInputStream(filePath);

        // 创建一个文档对象
        XWPFDocument document = new XWPFDocument(fileInputStream);

        // 定义一个HashMap来存储图片的信息
        Map<String, byte[]> ImagesHashMap = new HashMap<>();
        // 获取所有段落
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        // 遍历所有段落
        for (XWPFParagraph paragraph : paragraphs) {
            List<XWPFRun> runs = paragraph.getRuns();
            for (XWPFRun run : runs) {
                // 获取运行区域的所有图片
                List<XWPFPicture> pictures = run.getEmbeddedPictures();

                // 遍历图片
                for (XWPFPicture picture : pictures) {
                    // 我们需要定义一个HashMap来存储图片的信息
                    String fileName = picture.getPictureData().getFileName();
                    byte[] data = picture.getPictureData().getData();  // 是以二进制的形式

                    ImagesHashMap.put("D:\\Idea-projects\\POI_word\\poi1"+fileName, data);
                }
            }
        }

        // 遍历ImagesHashMap集合
        for (Map.Entry<String, byte[]> entry : ImagesHashMap.entrySet()) {
            String FilePathKey = entry.getKey();
            byte[] Filevalue = entry.getValue();

            System.out.println("开始写入图片...");
            // 创建一个输出流
            FileOutputStream fileOutputStream = new FileOutputStream(FilePathKey);
            fileOutputStream.write(Filevalue);
            fileOutputStream.close();

            System.out.println("图片写入完成...");
        }
    }
}

7 读取文档中表格的内容

package com.exampleRead;

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

import java.io.File;
import java.io.FileInputStream;
import java.util.List;

/**
 * @Author:xiexu
 * @Date:2024/1/13 13:01
 */
public class Read_table {
    public static void main(String[] args) throws Exception {

        // 定义一个待读取的文件路径
        String filePath = "D:\\Idea-projects\\POI_word\\write_tableStyle.docx";

        // 判断路径是否存在
        File pathCheck = new File(filePath);
        if (!pathCheck.exists()){
            System.out.println("文件路径不存在");
            return;
        }

        // 创建一个输入流
        FileInputStream fileInputStream = new FileInputStream(filePath);

        // 创建一个文档对象
        XWPFDocument document = new XWPFDocument(fileInputStream);

        // 获取表格对象
        List<XWPFTable> tables = document.getTables();
        // 遍历表格(因为一个文档中可能有多个表格)
        for (XWPFTable table : tables) {
            List<XWPFTableRow> rows = table.getRows();
            // 遍历所有的行
            for (XWPFTableRow row : rows) {
                List<XWPFTableCell> cells = row.getTableCells();
                // 遍历所有的单元格
                for (XWPFTableCell cell : cells) {
                    System.out.println("开始读取表格...");
                    // 获取内容
                    String text = cell.getText();
                    System.out.println("单元格中的内容是:" + text);
                }
            }
        }

        System.out.println("表格读取完毕");

        fileInputStream.close();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/316954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

半小时实现GPT纯血鸿蒙版

仅需半小时&#xff0c;即可实现纯血鸿蒙版本的ChatGPT&#xff01; 废话少说&#xff0c;先看效果图&#xff1a; 如上图所示&#xff0c;这个小Demo实现了AI智能问答。靠右加粗的文本是用户点击底部提交按钮后出现的&#xff1b;后面靠左对齐的普通文本是来自AI的回答内容。当…

CS5569 typec转HDMI 8k60hz单转带pd快充方案

集睿致远/ASL的CS5269是一款低成本、低功耗的半导体器件&#xff0c;通过USBType-C连接器将DisplayPort信号转换为HDMI 2.1。 这款创新的基于USBType-C的DisplayPort接收器具有高性能DSC解码器&#xff0c;集成的HDMI2.1发射器专门针对USBType-C到HDMI2.1转换器而设计&#xf…

运用java开发OpenCV

获取适当的 OpenCV 从版本 2.4.4 开始&#xff0c;OpenCV 包含桌面 Java 绑定。 下载 获取它的最简单方法是从 OpenCV SourceForge 存储库下载版本 2.4.4 或更高版本的相应软件包。 注意 Windows 用户可以在包内的文件夹中找到 Java 开发所需的预构建文件。对于其他操作系…

RK3568驱动指南|第十二篇 GPIO子系统-第133章 GPIO操作函数实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

【Arco】表格自定义信息布局

效果 <template><!-- 表格 --><a-table :data"data" style"margin-top: 30px" :bordered"false"><template #columns><a-table-columntitle"商品信息":header-cell-style"{ paddingLeft: 30px }&qu…

MySQL夯实之路-存储引擎深入浅出

innoDB Mysql4.1以后的版本将表的数据和索引放在单独的文件中 采用mvcc来支持高并发&#xff0c;实现了四个标准的隔离级别&#xff0c;默认为可重复读&#xff0c;并且通过间隙锁&#xff08;next-key locking&#xff09;策略防止幻读&#xff08;查询的行中的间隙也会锁定…

Centos7安装K8S

Centos7安装K8S 安装过程中没有出现的错误可以往下 根据以前一些博主写的博客&#xff0c;在小阳翻了不下几十篇博客之后&#xff0c;我果断是放弃了&#xff0c;于是找到了官网地址&#xff0c;然后也有坑 1. 关闭防火墙 systemctl stop firewalld systemctl disable firew…

ssm基于Javaweb的网上奶茶店系统的设计与实现论文

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

助力工业园区作业违规行为检测预警,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建工业园区场景下作业人员违规行为检测识别系统

在很多工业园区生产作业场景下保障合规合法进行作业生产操作&#xff0c;对于保护工人生命安全降低安全隐患有着非常重要的作用&#xff0c;但是往往在实际的作业生产中&#xff0c;因为一个安全观念的淡薄或者是粗心大意&#xff0c;对于纪律约束等意思薄弱&#xff0c;导致在…

宝塔安装redis并且远程连接redis教程

第一步&#xff1a;搜索redis并安装 第二步&#xff1a;在防火墙添加端口6379 第三步&#xff1a;查看宝塔防火墙是否开启了6379端口 firewall-cmd --zonepublic --list-ports 很显然并没有开启 第四步&#xff1a;开启防火墙的6379端口 firewall-cmd --zonepublic --add-po…

Linux学习记录——사십이 高级IO(3)--- Poll型服务器

文章目录 1、认识poll接口2、实现3、特点 1、认识poll接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout);// pollfd结构 struct pollfd {int fd; /* file descriptor */short events; /* requested events */short revents; /* returned…

Linux系统SSH远程管理服务

目录 一、SSH协议是什么&#xff1f; 1、SSH协议的定义&#xff1a; 2、SSH协议的优点 3、SSH的客户端与服务端 4、SSH的原理 4.1公钥首次连接原理 4.2ssh远程登录 4.3使用简单的SSH远程登录 二、OpenSSH服务器 1、OpenSSH简介 2、配置Openssh服务端 3、SSH服务的最…

Unity中URP中的光照简介

文章目录 前言URP下的光照在Unity中的设置1、主灯设置2、额外灯设置3、反射光设置 前言 我们在这篇文章开始了解URP下的光照。 URP下的光照在Unity中的设置 1、主灯设置 主灯可以选择 禁用 或 逐像素 光照 当选择逐像素光照的主灯后 Cast Shadows&#xff1a;可以选择开启 或…

CSS 流光发光按钮

<template><view class="content"><view class="a"><text></text><text></text><text></text><text></text>发光按钮</view></view></template><script></…

HTML标签(一)

目录 HTML语法规范 基本语法概述 标签关系 HTML基本结构标签 第一个HTML网页 开发工具 VSCode的使用&#xff1a; VScode工具生成骨架标签新增代码 文档类型声明标签 lang语言种类 字符集 总结 HTML常用标签 标签语义 标题标签 段落标签 换行标签 文本格式化…

如何公网远程访问Linux AMH服务器管理面板【内网穿透】

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6…

【UEFI基础】EDK网络框架(ARP)

ARP ARP协议说明 从这里开始涉及到的网络协议都是比较通用的了&#xff0c;在一般的TCP/IP四层模型中都能够看到这些内容&#xff0c;不过这里主要介绍的还是其在BIOS下的实现&#xff0c;但是在此之前还是需要先说明ARP的作用。 ARP的全称是Address Resolution Protocol&am…

AI-数学-高中-4.函数表达式特性-要变一起变

求f(x):换元法&#xff1a;左边代换时&#xff0c;右边也要同时替换&#xff0c;原作者视频&#xff1a;函数】1引导课&#xff1a;高中为什么用f(x)_哔哩哔哩_bilibili 1.什么是函数&#xff1a;给定任意一个x&#xff0c;都有唯一确定的y与之对应&#xff0c;这种x与y的关系就…

如何提高匹配的精确度(多次学习)

我们工业自动化中&#xff0c;视觉软件匹配&#xff0c;都是学习一次&#xff0c;比如找到轮廓&#xff0c;旋转360度&#xff0c;也就是有360个轮廓&#xff0c;然后到图像中去找任意角度的目标。 这样的学习并不能一而概括全。 所以&#xff0c;我借鉴ai的方法&#xff0c;…

【计算机组成原理】指令流水线的三种冒险情况(Hazards)

冒险 在计算机架构中&#xff0c;流水线冒险是指在指令流水线的执行过程中由于数据相关性或控制相关性而导致的一种性能问题。指令流水线是将指令执行过程划分为多个阶段&#xff0c;这样可以同时处理多条指令&#xff0c;从而提高指令执行的效率。然而&#xff0c;流水线执行…
最新文章