java读取word内容中的控件,[简单]POI读取word 2007内容控件

见代码 :

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.ISDTContent;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import org.apache.poi.xwpf.usermodel.XWPFSDT;

import org.apache.poi.xwpf.usermodel.XWPFTable;

import org.apache.poi.xwpf.usermodel.XWPFTableRow;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLock;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtCell;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentCell;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentRun;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtPr;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtText;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTString;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;

//只处理了文本(不包括公式) 只处理了正文

public class POI_07_读取内容控件_S3_Test {

public static void main(String[] args) throws Exception {

POI_07_读取内容控件_S3_Test t = new POI_07_读取内容控件_S3_Test();

t.printAllSdtContent("f:/saveFile/temp/内容控件_纯文本 - 副本.docx");

}

public void printAllSdtContent(String filePath) throws Exception {

XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(filePath));

// 打印独立于段落和表格外的内容控件

// 关于XWPFSDT可以参考http://svn.apache.org/repos/asf/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java

Iterator itrator = xdoc.getBodyElementsIterator();

while (itrator.hasNext()) {

IBodyElement element = itrator.next();

if (element instanceof XWPFSDT) {

XWPFSDT sdt = (XWPFSDT) element;

printXWPFSDTContent(sdt);

}

}

// 打印段落内内容控件

List paraList = xdoc.getParagraphs();

printParaListContent(paraList);

// 打印表格内内容控件

List tblList = xdoc.getTables();

for (int i = 0, len = tblList.size(); i < 0; i++) {

XWPFTable table = tblList.get(i);

for (int j = 0, rcount = table.getNumberOfRows(); j < rcount; j++) {

XWPFTableRow row = table.getRow(j);

List tblSdtList = row.getCtRow().getSdtList();

if (tblSdtList != null && tblSdtList.size() > 0) {

for (CTSdtCell ctSdtCell : tblSdtList) {

CTSdtPr sdtPr = ctSdtCell.getSdtPr();

printSdtPrContent(sdtPr);

CTSdtContentCell sdtContent = ctSdtCell.getSdtContent();

printSdtContentCell(sdtContent);

}

}

}

}

}

//无法获取更多的内容(如文本类型,是否可编辑)

public void printXWPFSDTContent(XWPFSDT sdt) {

StringBuffer sb = new StringBuffer();

sb.append(" 标记:").append(sdt.getTag());

sb.append(" 标题:").append(sdt.getTitle());

ISDTContent content = sdt.getContent();

sb.append(" 内容:").append(content.getText());

System.out.println(sb.toString());

}

public void printParaListContent(List paraList) {

if (paraList == null || paraList.size() == 0) {

return;

}

for (XWPFParagraph para : paraList) {

List sdtList = para.getCTP().getSdtList();

if (sdtList == null || sdtList.size() == 0) {

continue;

}

for (CTSdtRun sdtRun : sdtList) {

CTSdtPr sdtPr = sdtRun.getSdtPr();

printSdtPrContent(sdtPr);

CTSdtContentRun sdtContent = sdtRun.getSdtContent();

printSdtContent(sdtContent);

}

}

}

// 解析样式,区分纯文本和格式文本

public void printSdtPrContent(CTSdtPr sdtPr) {

if (sdtPr == null) {

return;

}

StringBuffer sb = new StringBuffer();

List textList = sdtPr.getTextList();

if (textList != null && textList.size() > 0) {

sb.append(" 内容控件类型:").append("纯文本");

CTSdtText sdtText = textList.get(0);

if (sdtText.getMultiLine() != null) {

int mulType = sdtText.getMultiLine().intValue();

if (mulType == 1 || mulType == 3 || mulType == 6) {

sb.append(" 是否允许回车:").append("是");

}

}

} else {

sb.append(" 内容控件类型:").append("格式文本");

}

List idList = sdtPr.getIdList();

if (idList != null && idList.size() > 0) {

sb.append(" ID:").append(idList.get(0).getVal());

}

List aliasList = sdtPr.getAliasList();

if (aliasList != null && aliasList.size() > 0) {

sb.append(" 标题:").append(aliasList.get(0).getVal());

}

List tagList = sdtPr.getTagList();

if (tagList != null && tagList.size() > 0) {

sb.append(" 标记:").append(tagList.get(0).getVal());

}

List lockList = sdtPr.getLockList();

if (lockList != null && lockList.size() > 0) {

CTLock ctLock = lockList.get(0);

int lockType = ctLock.getVal().intValue();

switch (lockType) {

case 1:

sb.append(" 锁定方式:").append("无法删除内容控件");

break;

case 2:

sb.append(" 锁定方式:").append("无法编辑内容");

break;

case 4:

sb.append(" 锁定方式:").append("无法删除内容控件,无法编辑内容");

break;

default:

sb.append(" 锁定方式:").append(ctLock.getVal());

break;

}

}

List tempList = sdtPr.getTemporaryList();

if (tempList != null && tempList.size() > 0) {

if (tempList.get(0).getVal() != null) {

int isOn = tempList.get(0).getVal().intValue();

if (isOn == 1 || isOn == 3 || isOn == 6) {

sb.append(" 替换后是否删除内容控件:").append("是");

}

} else {

sb.append(" 替换后是否删除内容控件:").append("是");

}

}

List rprList = sdtPr.getRPrList();

if (rprList != null && rprList.size() > 0) {

CTRPr rpr = rprList.get(0);

CTString rprStyle = rpr.getRStyle();

if (rprStyle != null) {

sb.append(" 样式名称:").append(rprStyle.getVal());

}

}

System.out.println(sb.toString());

}

// 段落内内容控件

public void printSdtContent(CTSdtContentRun sdtContentRun) {

if (sdtContentRun == null) {

return;

}

StringBuffer sb = new StringBuffer();

List ctrList = sdtContentRun.getRList();

sb.append(getCTRContent(ctrList));

System.out.println("内容:" + sb.toString());

}

// 表格内内容控件

public void printSdtContentCell(CTSdtContentCell sdtContentCell) {

if (sdtContentCell == null) {

return;

}

StringBuffer sb = new StringBuffer();

List cttcList = sdtContentCell.getTcList();

sb.append(getCTTcContent(cttcList));

System.out.println("内容:" + sb.toString());

}

// 段落

public String getCTRContent(List ctrList) {

StringBuffer sb = new StringBuffer();

if (ctrList != null && ctrList.size() > 0) {

for (CTR ctr : ctrList) {

List tList = ctr.getTList();

if (tList != null && tList.size() > 0) {

for (CTText ctText : tList) {

sb.append(ctText.getStringValue());

}

}

}

}

return sb.toString();

}

// 表格

public String getCTTcContent(List cttcList) {

StringBuffer sb = new StringBuffer();

if (cttcList != null && cttcList.size() > 0) {

for (CTTc cttc : cttcList) {

List pList = cttc.getPList();

if (pList != null && pList.size() > 0) {

for (CTP ctp : pList) {

List rList = ctp.getRList();

sb.append(getCTRContent(rList));

}

}

}

}

return sb.toString();

}

}

全文完。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值