POI相关使用以及复杂表格读取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POI相关使用以及复杂表格读取相关的知识,希望对你有一定的参考价值。

poi读取段落demo

package com.ocr.word.poi;

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

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

public class ParagraphReader {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\word\aaa.docx");
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

            List<XWPFParagraph> paragraphList = xdoc.getParagraphs();

            for (XWPFParagraph paragraph : paragraphList) {

                System.out.println(paragraph.getText());
                System.out.println(paragraph.getAlignment());
                System.out.print(paragraph.getRuns().size());
                System.out.println(paragraph.getStyle());

                // Returns numbering format for this paragraph, eg bullet or lowerLetter.
                System.out.println(paragraph.getNumFmt());
                System.out.println(paragraph.getAlignment());

                System.out.println(paragraph.isWordWrapped());

                System.out.println("********************************************************************");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

poi读取表格简单demo

package com.ocr.word.poi;

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

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFTable;

public class TableReader {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\word\aaa.docx");
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
            Iterator bodyElementIterator = xdoc.getBodyElementsIterator();
            while (bodyElementIterator.hasNext()) {
                IBodyElement element = (IBodyElement) bodyElementIterator.next();

                if ("TABLE".equalsIgnoreCase(element.getElementType().name())) {
                    List<XWPFTable> tableList = element.getBody().getTables();
                    for (XWPFTable table : tableList) {
                        System.out.println("Total Number of Rows of Table:" + table.getNumberOfRows());
                        for (int i = 0; i < table.getRows().size(); i++) {

                            for (int j = 0; j < table.getRow(i).getTableCells().size(); j++) {
                                System.out.println(table.getRow(i).getCell(j).getText());
                            }
                        }
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

poi读取样式

package com.ocr.word.poi;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class StyleReader {

    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\word\aaa.docx");
            XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));

            List<XWPFParagraph> paragraphList = xdoc.getParagraphs();

            for (XWPFParagraph paragraph : paragraphList) {

                for (XWPFRun rn : paragraph.getRuns()) {

                    System.out.println(rn.isBold());
                    System.out.println(rn.isHighlighted());
                    System.out.println(rn.isCapitalized());
                    System.out.println(rn.getFontSize());
                }

                System.out.println("********************************************************************");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

}

poi读取doc和docx文本demo

package com.ocr.word;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.util.FileCopyUtils;

public class Readword {

    // 全?角半?角符号转化之间的间隔
    public static final char DBC_SBC_STEP = 65248;
    private final static String RESULT_DATA = "data";
    private final static String RESULT_ANGLE = "angle";
    private final static String RESULT_WORDS_INFO = "prism_wordsInfo";

    /**
     * 字符串转unicode
     * 
     * @param str
     * @return
     */
    public static String stringToUnicode(String str) {
        StringBuffer sb = new StringBuffer();
        char[] c = str.toCharArray();
        for (int i = 0; i < c.length; i++) {
            sb.append("\u" + Integer.toHexString(c[i]));
        }
        return sb.toString();
    }

    /**
     * 获取段落内容
     * 
     * @param paragraph
     */
    private static void getParagraphText(XWPFParagraph paragraph) {
        // 获取段落中所有内容
        List<XWPFRun> runs = paragraph.getRuns();
        if (runs.size() == 0) {
            System.out.println("按了回车(新段落)");
            return;
        }
        StringBuffer runText = new StringBuffer();
        for (XWPFRun run : runs) {
            runText.append(run.text());
        }
        if (runText.length() > 0) {
            runText.append(",对齐方式:").append(paragraph.getAlignment().name());
            System.out.println(runText);
        }
    }

    /**
     * 获取表格内容
     * 
     * @param table
     */
    private static void getTabelText(XWPFTable table) {
        List<XWPFTableRow> rows = table.getRows();

        for (XWPFTableRow row : rows) {
            List<XWPFTableCell> cells = row.getTableCells();
            for (XWPFTableCell cell : cells) {
                // 简单获取内容(简单方式是不能获取字体对齐方式的)
                // System.out.println(cell.getText());
                // 一个单元格可以理解为一个word文档,单元格里也可以加段落与表格
                List<XWPFParagraph> paragraphs = cell.getParagraphs();
                for (XWPFParagraph paragraph : paragraphs) {
                    getParagraphText(paragraph);
                }
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String filePath="D:\word\aaa.doc";
        StringBuffer wordMapStr=new StringBuffer();

        Map wordMap = new LinkedHashMap();//创建一个map对象存放word中的内容
        try {
            if(filePath.endsWith(".doc")){ ///判断文件格式
                InputStream fis = new FileInputStream(new File(filePath));
                WordExtractor wordExtractor = new WordExtractor(fis);//使用HWPF组件中WordExtractor类从Word文档中提取文本或段落
                int i=1;
                for(String words : wordExtractor.getParagraphText()){//获取段落内容
                    System.out.println(words);//.replaceAll("", "")
                    wordMap.put("DOC文档,第("+i+")段内容",words);
                    wordMapStr.append(words.replaceAll("", "")+"
");
                    i++;
                }
                fis.close();
            }
            if(filePath.endsWith(".docx")){
                File uFile = new File("tempFile.docx");//创建一个临时文件
                if(!uFile.exists()){
                    uFile.createNewFile();
                }
                FileCopyUtils.copy(new File(filePath), uFile);//复制文件内容
                OPCPackage opcPackage = POIXMLDocument.openPackage("tempFile.docx");//包含所有POI OOXML文档类的通用功能,打开一个文件包。
                XWPFDocument document = new XWPFDocument(opcPackage);//使用XWPF组件XWPFDocument类获取文档内容
                List<XWPFParagraph> paras = document.getParagraphs();
                int i=1;
                for(XWPFParagraph paragraph : paras){
                    String words = paragraph.getText();
                    System.out.println(words);
                    wordMap.put("DOCX文档,第("+i+")段内容",words+"
");
                    wordMapStr.append(words);
                    i++;
                }
                List<XWPFTable> it = document.getTables();

                it.forEach(item->{
                    wordMapStr.append(item.getText());
                });
                uFile.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("-->"+wordMapStr.toString());
       System.out.println(wordMap);

    }

}

以上是关于POI相关使用以及复杂表格读取的主要内容,如果未能解决你的问题,请参考以下文章

雷林鹏分享:Apache POI电子表格/Spreadsheet

雷林鹏分享:Apache POI电子表格/Spreadsheet

java poi xwpf操作word生成一个表格怎么合并单元格,求大神指导!

java中poi如何读取不同word中的表格写入到另一个word中,就是把几个word中的表格合并,如何实现

用java的poi类读取一个excel表格的内容后再写入到一个新excel表格中的完整代码

java如何导出excel表格,如果用poi,java代码如何实现.,求代码!!!