html文本框获取表格内容,Apache poi从文本框中获取表格

这段代码演示了如何使用Apache POI和XmlBeans解析.docx文件,提取文档中的所有表格。它遍历document.xml,查找并添加w:tbl元素到列表中,同时跳过mc:Fallback以避免重复显示文本框内的表格。最后,代码将表格内容转换为HTML格式并打印。此代码依赖ooxml-schemas-1.3.jar库。
摘要由CSDN通过智能技术生成

下面的代码是低层次解析*.docx文件并在它的文档体中获取所有表格。

该方法使用org.apache.xmlbeans.XmlCursor并搜索document.xml中的所有w:tbl元素。如果发现将它们添加到List。

由于文本框矩形形状在document.xml中提供了回退内容,因此我们需要跳过mc:Fallback元素。否则,我们会在文本框内显示两次表格。

最后我们通过List获取所有表格的内容。

import java.io.*;

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

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

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

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

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

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

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

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

import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;

import org.apache.xmlbeans.XmlCursor;

import javax.xml.namespace.QName;

import java.util.List;

import java.util.ArrayList;

public class WordReadAllTables {

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

XWPFDocument document = new XWPFDocument(new FileInputStream("22.docx"));

CTBody ctbody = document.getDocument().getBody();

XmlCursor xmlcursor = ctbody.newCursor();

QName qnameTbl = new QName("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "tbl", "w");

QName qnameFallback = new QName("http://schemas.openxmlformats.org/markup-compatibility/2006", "Fallback", "mc");

List allCTTbls = new ArrayList();

while (xmlcursor.hasNextToken()) {

XmlCursor.TokenType tokentype = xmlcursor.toNextToken();

if (tokentype.isStart()) {

if (qnameTbl.equals(xmlcursor.getName())) {

if (xmlcursor.getObject() instanceof CTTbl) {

allCTTbls.add((CTTbl)xmlcursor.getObject());

} else if (xmlcursor.getObject() instanceof XmlAnyTypeImpl) {

allCTTbls.add(CTTbl.Factory.parse(xmlcursor.getObject().toString()));

}

} else if (qnameFallback.equals(xmlcursor.getName())) {

xmlcursor.toEndToken();

}

}

}

for (CTTbl cTTbl : allCTTbls) {

StringBuffer tableHTML = new StringBuffer();

tableHTML.append("

for (CTRow cTRow : cTTbl.getTrList()) {

tableHTML.append("

\n");

for (CTTc cTTc : cTRow.getTcList()) {

tableHTML.append("

");

for (CTP cTP : cTTc.getPList()) {

for (CTR cTR : cTP.getRList()) {

for (CTText cTText : cTR.getTList()) {

tableHTML.append(cTText.getStringValue());

}

}

}

tableHTML.append("

");

}

tableHTML.append("\n

\n");

}

tableHTML.append("

");

System.out.println(tableHTML);

}

document.close();

}

}

此代码需要在faq-N10025提到的所有模式ooxml-schemas-1.3.jar的全部罐子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值