POI:对Word的基本操作

这篇具有很好参考价值的文章主要介绍了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("文件创建成功");

    }
}

POI:对Word的基本操作,POI,java,word

 文章来源地址https://www.toymoban.com/news/detail-797385.html

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("表格写入成功!");
    }
}

POI:对Word的基本操作,POI,java,word

 

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("表格样式设置完成");
    }
}

POI:对Word的基本操作,POI,java,word

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("图片写入完成");
    }
}

POI:对Word的基本操作,POI,java,word


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();
    }
}

POI:对Word的基本操作,POI,java,word


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

POI:对Word的基本操作,POI,java,word


 POI:对Word的基本操作,POI,java,word


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

POI:对Word的基本操作,POI,java,word


POI:对Word的基本操作,POI,java,word

 

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();
    }
}

POI:对Word的基本操作,POI,java,word

 

到了这里,关于POI:对Word的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA POI操作word一篇就够(超级实用)识别上标、下标

    针对java操作word,大家有不懂的可以在评论区留言。 最近做项目要用到word导出和导入,从网上找资料,发现都是一些零零散散的碎片,不能一步到位,经过项目的论证,站到业务和技术的角度,写一篇java通过poi,自定义word模板,对word文档内容进行替换,对文档中表格进行填

    2024年02月16日
    浏览(42)
  • 【JAVA - POI 合集】之 POI 操作word 图表,柱状图,折线图,雷达图,条形图 poi4.1.2

            关于poi 操作word 的吐槽: 山路崎岖, 一言难尽啊!!!         原本项目中的poi 版本是3.17的版本,但是3.17对于在word 中操作图表是有问题的。所以对项目的jar 包进行了升级,升级到了 4.1.2 。 要求 JDK  1.8  以上. 现在用8以下的项目基本上也很少了。话不多

    2024年02月09日
    浏览(34)
  • Java poi之word文本替换

    应公司需求,需实现以下功能 word文本内容的替换; word文本内容的提取; word文档中图片的提取存放 此文章将使用Apache POI实现Word文档中文本内容的替换更新; Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 简

    2024年02月07日
    浏览(41)
  • POI:对Excel的基本写操作 整理1

    首先导入相关依赖  (1)当向03版本的Excel中写入数据 (2)当向07版本的Excel中写入数据 (1)当向03版本的Excel中写入 大量数据 缺点: 最多只能处理65536行,否则会抛出异常; 优点:过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快。 1.129s  还是非常快的 只能写

    2024年02月01日
    浏览(53)
  • POI:对Excel的基本读操作 整理2

    因为07版本和03版本操作流程大差不差,所以这边就以03版本为例     读取下列含有不同数据类型的Excel表格,并输出读取的数据    

    2024年01月22日
    浏览(40)
  • JAVA POI富文本导出WORD添加水印

            在java 开发中 特别是OA开发中,经常会遇到导出word的操作,同时随时AI时代的到来,很多导出文档都需要增加水印标识,用来追溯数据生产方。         本文将介绍如何通过操作POI 来实现导出富文本到word ,并在文档中追加水印功能。 导入POM         首先我们

    2024年02月03日
    浏览(56)
  • java使用apache.poi导出word文件

    功能说明: 将试卷导出word,并可以打印,装订,效果图: 下面是实现代码:

    2024年02月15日
    浏览(49)
  • Java poi之word文本图片内容提取

    应公司需求,需实现以下功能 word文本内容的替换; word文本内容的提取; word文档中图片的提取存放 此文章将使用Apache POI实现Word文档中文本内容及图片的提取; Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。

    2024年02月10日
    浏览(53)
  • java使用poi解析word表格,把数据入库

    77、java解析word表格,把数据入库

    2023年04月09日
    浏览(43)
  • java 使用POI-TL根据word模版,生成word文件,含图片,富文本。

    1.引入mavna坐标` 2 .poi-tl-ext插件主要用于富文本内容格式在word展现 3.word模版创建 3.具体代码实现 4.本文的miniourl路径实质为网络路径的文件。

    2024年02月16日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包