Java:实现从word文档中取出指定数据存入excel中的小程序。

lurenjia / 2023-05-09 / 原文

文件准备

一、把需要处理的word全都放入d盘下 words目录中。

 

 

 

 

程序配置

一、下载安装Idea

  地址:IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com)

二、启动idea,新建项目

 三、导入依赖

  在pom.xml中加入以下数据,然后刷新

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>

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

 四、新建一个Demo类

  Demo类内容:

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

/**
 * @author 
 * @date 2023/5/8-21:43
 * @description
 */
public class Demo {

    /**
     * word文档的文件夹
     */
    private static final String WORD_FILE_PATH="d:/words";

    /**
     * excel文件出现的位置
     */
    public static final String EXCEAL_FILE_PATH="d:/best.xlsx";

    /**
     * 主送位置
     */
    public static final int TEXT_HEAD = 13;
    /**
     * 日期位置
     */
    public static final int TEXT_END = 20;

    public static void main(String[] args) throws Exception {
        Demo demo= new Demo();
        System.out.println("-------------------程序开始----------------------");
        //获取文件名
        ArrayList<String> fileName = demo.getChildFileName(WORD_FILE_PATH);

        //创建Excel文件
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Sheet1");

        //计数器
        int i = 0;

        //获取内容
        for (String s:fileName){
            //获取到主题和时间
            String[] strings = demo.wordToExcel(s);
            //写入表格中
            demo.writeText(strings,i,sheet);
            System.out.println("第"+(i++)+"次循环开始");
        }

        //写出Excel文件
        FileOutputStream outputStream = new FileOutputStream(EXCEAL_FILE_PATH);
        workbook.write(outputStream);

        workbook.close();
        System.out.println("-------------------程序结束----------------------");
    }

    private void writeText(String[] strings,int i, XSSFSheet sheet) throws IOException {
        writeExcel(strings[0],i,0,sheet);
        writeExcel(strings[1],i,1,sheet);
    }

    /**
     * 把指定内容写到指定位置
     * @param text
     * @param rowNumber
     * @param columnIndex
     * @param sheet
     * @throws IOException
     */
    private void writeExcel(String text,int rowNumber,int columnIndex, XSSFSheet sheet) throws IOException {
        //选中行
        XSSFRow row = sheet.getRow(rowNumber);
        if (row == null) {
            row = sheet.createRow(rowNumber);
        }
        //选中列
        XSSFCell cell = row.createCell(columnIndex);
        //写入
        cell.setCellValue(text);
    }

    /**
     * 通过文件名,拿到主送和日期:使用下划线分开
     * @param wordName
     * @return
     * @throws Exception
     */
    private String[] wordToExcel(String wordName) throws Exception{
        //获取到文档对象
        XWPFDocument doc = new XWPFDocument(new FileInputStream(WORD_FILE_PATH+"/"+wordName));

        //取出主送
        XWPFParagraph paragraphHead = doc.getParagraphs().get(TEXT_HEAD);
        String textHaed = paragraphHead.getText();
        //去掉冒号
        textHaed = textHaed.substring(0, textHaed.length() - 1);

        System.out.print("获取到主送:"+textHaed);

        //取出落款
        XWPFParagraph paragraphEnd = doc.getParagraphs().get(TEXT_END);
        String textEnd = paragraphEnd.getText();
        System.out.println("----获取到日期:"+textEnd);
        String[] strings = {textHaed,textEnd};
        doc.close();
        return strings;
    }

    /**
     * 通过文件夹路径获取到里面所有的文件名
     * @param path
     * @return
     */
    private ArrayList getChildFileName(String path){
        File file= new File(path);
        ArrayList list = traverseFolder(file);
        return list;
    }

    /**
     * 遍历文件
     * @param folder
     * @return
     */
    private ArrayList traverseFolder(File folder) {
        ArrayList list = new ArrayList();
        if (folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        traverseFolder(file);
                    } else {
                        list.add(file.getName());
                        System.out.println(file.getName());
                    }
                }
            }
        }
        return list;
    }
}
点击查看代码

 五、执行main方法

  即可在指定位置获得excel。

运行结果

在d盘下生成excel文件best.xlsx