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中的表格合并,如何实现