POI操作word文档

场景:

        word文档解析写入数据库

        数据库内容写入word文档

操作

依赖

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>

代码实现流程

1.创建文档

 public static void main(String[] args) throws IOException {
        //创建一个word 文档对象 :操作一个拓展名为  .docx 的word文档
        XWPFDocument doc = new XWPFDocument();

        //创建一个文件对象
        File file = new File("D:\\Java\\code\\JavaSE\\poi\\test.docx");

        //创建一个文件输出流
        FileOutputStream outputStream = new FileOutputStream(file);

        //通过文件输出流,将目标写入到 磁盘
        doc.write(outputStream);

        //关闭 文件输出流
        outputStream.close();
    }

2.写入文档

2.1 段落与段落内容


        //word文档分段落,首先创建一个段落
        XWPFParagraph paragraph = doc.createParagraph();

        //创建一个具有相同属性的文本区域 --盒子:在该文本区域写入内容
        XWPFRun paragraphRun = paragraph.createRun();
        paragraphRun.setText("你好,今天天气不错");
2.1.2文本区域、段落操作
段落居中
paragraph.setAlignment(ParagraphAlignment.CENTER);
文本区域加粗
paragraphRun.setBold(true);
文本区域设置字体大小
paragraphRun.setFontSize(30);
段落首行缩进
paragraph2.setIndentationFirstLine(400);

2.2 表格

2.2.1创建表格
        //向word 文档输出一个表格
        XWPFTable table = doc.createTable();
        table.setWidth("100%");//表格占据文档的百分比
2.2.2表格输入内容
        //表格分为行,行中有单元格
        //先获取表格的第一行,再对单元格进行操作
        XWPFTableRow oneRow = table.getRow(0);
        XWPFTableCell oneRowCell = oneRow.getCell(0);
        oneRowCell.setText("我是第一行,第一列");

        //创建第一行第二列
        oneRow.addNewTableCell().setText("我是第一行,第二列");

第二行略有不同,可以在第一行的模板上添加

        //创建第二行
        XWPFTableRow row = table.createRow();
        row.getCell(0).setText("我是第二行,第一列");
        row.getCell(1).setText("我是第二行,第二列");

3.读取文档

3.1简单读取word文档内容
        //找到读取的目标文件
        File file = new File("D:\\Java\\code\\JavaSE\\poi\\test.docx");

        //创建一个文件输入流
        FileInputStream fileInputStream = new FileInputStream(file);

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

        //创建一个文档执行器,使用执行器的输出方法
        XWPFWordExtractor extractor = new XWPFWordExtractor(document);

        //获取当前word的文本内容
        String text = extractor.getText();

        System.out.println(text);

        fileInputStream.close();
3.2读取文档中的图片
        String filePath = "D:\\Java\\code\\JavaSE\\poi\\test.docx";
        File file = new File(filePath);

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

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

        //获得文档所有内容-->段落
        List<XWPFParagraph> paragraphs = document.getParagraphs();

        //准备一个集合,存储拿到的图片的名字和二进制数据
        HashMap<String, byte[]> images = new HashMap<>();

        //遍历段落
        for (XWPFParagraph paragraph: paragraphs){
            //获得所有文本区域
            List<XWPFRun> runs = paragraph.getRuns();
            //遍历文本区域
            for (XWPFRun run : runs){
                //获得所有图片
                List<XWPFPicture> pics = run.getEmbeddedPictures();
                //遍历图片
                for (XWPFPicture pic : pics){
                    //获得每个图片名
                    String fileName = pic.getPictureData().getFileName();

                    //图片二进制,可以通过输出流的read方法写出
                    byte[] data = pic.getPictureData().getData();

                    //集合:key是文件地址,value是二进制数据
                    images.put("D:\\Java\\code\\JavaSE\\poi\\"+fileName,data);
                }
            }
        }

        //遍历map集合,
        for(Map.Entry<String, byte[]> entry :images.entrySet()){
            FileOutputStream fileOutputStream = new FileOutputStream(entry.getKey());
            fileOutputStream.write(entry.getValue());
            fileOutputStream.close();
        }
    }
3.3读取文档中的表格
        String filePath = "D:\\Java\\code\\JavaSE\\poi\\test.docx";

        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){
                    String text = cell.getText();
                    System.out.println(text);

                    //拿到了值,进行逻辑处理
                }
            }
        }

笔记来自b站:喜欢编程的代先生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值