import java.io.FileOutputStream; import java.util.Formatter; import java.util.List; import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; public class POI_读取指定文本框值_S3_Test { public static void main(String[] args) throws Exception { POI_读取指定文本框值_S3_Test t = new POI_读取指定文本框值_S3_Test(); String filePath="f:/saveFile/temp/文本框0003.docx"; t.readTextBoxContentUseXPath(filePath); t.readTextBoxContentUseCursor(filePath); } public void readTextBoxContentUseXPath(String filePath) throws Exception { XWPFDocument xdoc = openDocument(filePath); List<XWPFParagraph> paragraphList = xdoc.getParagraphs(); // 取第一段 XWPFParagraph paragrap = paragraphList.get(0); // 文本框位于第一个<w:r></w:r>内 XmlObject object = paragrap.getCTP().getRArray(0); //System.out.println(object); XmlCursor selectPathCursor = getXmlObjectByXPath( object, "declare namespace ve='http://schemas.openxmlformats.org/markup-compatibility/2006'; declare namespace o='urn:schemas-microsoft-com:office:office'; declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships'; declare namespace m='http://schemas.openxmlformats.org/officeDocument/2006/math'; declare namespace v='urn:schemas-microsoft-com:vml'; declare namespace wp='http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'; declare namespace w10='urn:schemas-microsoft-com:office:word'; declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'; declare namespace wne='http://schemas.microsoft.com/office/word/2006/wordml';", "$this/w:pict/v:shape/v:textbox/w:txbxContent/w:p"); selectPathCursor.push();//保存当前位置 selectPathCursor .selectPath("declare namespace ve='http://schemas.openxmlformats.org/markup-compatibility/2006'; declare namespace o='urn:schemas-microsoft-com:office:office'; declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships'; declare namespace m='http://schemas.openxmlformats.org/officeDocument/2006/math'; declare namespace v='urn:schemas-microsoft-com:vml'; declare namespace wp='http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'; declare namespace w10='urn:schemas-microsoft-com:office:word'; declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'; declare namespace wne='http://schemas.microsoft.com/office/word/2006/wordml';" + "$this/w:r/w:t"); while (selectPathCursor.toNextSelection()) { System.out.println("文本框原来内容=" + selectPathCursor.getTextValue()); selectPathCursor.setTextValue("修改"); } selectPathCursor.pop();//恢复上次位置 selectPathCursor.toParent();//w:txbxContent selectPathCursor.toChild(1);//w:p[1] selectPathCursor .selectPath("declare namespace ve='http://schemas.openxmlformats.org/markup-compatibility/2006'; declare namespace o='urn:schemas-microsoft-com:office:office'; declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships'; declare namespace m='http://schemas.openxmlformats.org/officeDocument/2006/math'; declare namespace v='urn:schemas-microsoft-com:vml'; declare namespace wp='http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'; declare namespace w10='urn:schemas-microsoft-com:office:word'; declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'; declare namespace wne='http://schemas.microsoft.com/office/word/2006/wordml';" + "$this/w:r/w:t"); while (selectPathCursor.toNextSelection()) { System.out.println("文本框原来内容2=" + selectPathCursor.getTextValue()); selectPathCursor.setTextValue("修_改"); } selectPathCursor.dispose(); saveDocument(xdoc, "f:/saveFile/temp/sys_" + System.currentTimeMillis() + ".docx"); } public XmlCursor getXmlObjectByXPath(XmlObject xml, String nameSpace, String xpath) { // Create a temporary cursor for the XPath passed in XmlCursor xpathCursor = xml.newCursor(); // Create a formatter to format the XPath StringBuilder builder = new StringBuilder(); Formatter formatter = new Formatter(builder); formatter.format("%s %s", nameSpace, xpath); // Select the XPath xpathCursor.selectPath(formatter.toString()); xpathCursor.toNextSelection(); formatter.close(); return xpathCursor; } public void readTextBoxContentUseCursor(String filePath) throws Exception { XWPFDocument xdoc = openDocument(filePath); List<XWPFParagraph> paragraphList = xdoc.getParagraphs(); // 取第一段 XWPFParagraph paragrap = paragraphList.get(0); // 文本框位于第一个<w:r></w:r>内 XmlObject object = paragrap.getCTP().getRArray(0); //参考https://www.ibm.com/developerworks/cn/xml/x-beans1/ 高级特性部分 //System.out.println(object); XmlCursor cursor = object.newCursor(); cursor.toChild(1);// <xml-fragment> --> <w:pict> cursor.toChild(1);// <w:pict> --> <v:shape> cursor.toChild(0);// <v:shape> --> <v:textbox> cursor.toChild(0);// <v:textbox> --><w:txbxContent> cursor.toChild(0);// <w:txbxContent> --> <w:p> cursor.toChild(1);// <w:p> --> <w:r> cursor.toChild(1);// <w:r> --> <w:t> System.out.println("文本框原来值:"+cursor.getTextValue()); cursor.setTextValue("修改后"); // 回到<w:txbxContent>位置 cursor.toParent();// <w:t>--><w:r> cursor.toParent();// <w:r>--><w:p> cursor.toParent();// <w:p>--><w:txbxContent> cursor.toChild(1);// <w:txbxContent>--><w:p> cursor.toChild(1);// <w:p> --> <w:r> cursor.toChild(1);// <w:r> --> <w:t> System.out.println("文本框原来值:"+cursor.getTextValue()); cursor.setTextValue("修改后"); // 回到<w:p>位置 cursor.toParent();// <w:t>--><w:r> cursor.toParent();// <w:r>--><w:p> cursor.toChild(2);// <w:p>--><w:r> cursor.toChild(1);// <w:r> --> <w:t> System.out.println("文本框原来值:"+cursor.getTextValue()); cursor.setTextValue("4"); cursor.dispose(); saveDocument(xdoc, "f:/saveFile/temp/sys_" + System.currentTimeMillis() + ".docx"); } public void saveDocument(XWPFDocument document, String savePath) throws Exception { FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } public XWPFDocument openDocument(String filePath) throws Exception { XWPFDocument xdoc = new XWPFDocument( POIXMLDocument.openPackage(filePath)); return xdoc; } }
全文完.
相关推荐
上述示例展示了如何使用POI读取Word文档的内容,通过`WordExtractor`可以方便地获取整个文档的文本,或者通过`HWPFDocument`和`Range`对象深入到文档的各个部分,如章节(Section)、段落(Paragraph)和字符运行...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc、.docx)、Excel(.xls、.xlsx)等。在标题提到的"poi3.15"中,指的是Apache POI项目的3.15版本。这个版本允许开发者通过Java编程语言...
以下是一个简单的示例,演示如何使用 HWPFDocument 类来读取并修改一个 Word 文档: ```java import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; // 加载文档 HWPFDocument ...
1. 加载Word模板文件:使用poi-tl提供的API读取.docx文件。 2. 创建DataModel:根据业务需求,创建一个数据模型,包含需要替换到模板中的数据。 3. 替换模板内容:调用poi-tl的`DocumentEngine`或`TemplateEngine`,...
通过上述知识点,你可以使用Java的Apache POI库高效地处理Excel、Word和PowerPoint文件,无论是读取现有文件,还是创建新的文档,都能游刃有余。记得在实际开发中结合具体需求,灵活运用这些技术。
1. **创建和读取Word文档** - 使用Apache POI的`XWPFDocument`类可以创建和加载.docx格式的Word文档。首先,我们需要创建一个`XWPFDocument`实例,然后通过`XWPFParagraph`和`XWPFRun`对象添加文本、样式等元素。 ...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本示例程序中,我们关注的是如何使用Java和Apache POI库来操作PowerPoint(PPT)文件。POI 提供了丰富的API,...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel(.xlsx、.xls)、Word(.doc、.docx)和PowerPoint(.ppt、.pptx)。这个压缩包包含了POI项目中所有必要的jar包,总计十二个,确保了...
4. **读取Word文件** 对于Word文档,POI提供了HWPFDocument类来读取旧版本的.doc文件,而XWPFDocument则用于处理新版本的.docx文件。开发者可以读取段落、表格、图片等元素,并进行操作。 5. **写入Word文件** ...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。这个"poi3.14jar包"是Apache POI的3.14版本,是一个Java库,允许开发者在Java应用程序中创建、读取和修改Microsoft ...
- 读取Word文档内容,提取所需信息。 3. PowerPoint处理: - 创建新的PPT演示文稿,插入幻灯片、文本框、图片等元素。 - 编辑现有PPT,如修改内容、设置动画效果等。 - 读取PPT文件,进行内容提取或转换。 在...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Word(.doc, .docx)、Excel(.xls, .xlsx)和PowerPoint(.ppt, .pptx)。在你提到的"poi3.9及测试程序"中,POI 3.9 版本是一个较旧但仍然广泛...
- **读取内容**: POI允许读取Word文档的文本、样式、页眉、页脚和注释等信息。 3. **PowerPoint处理**: - **HSLF and XSLF**: 这两个API分别用于处理老版PPT和OpenXML格式的PPT。 - **创建演示文稿**: 开发者...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。这个压缩包“poi所有jar包”包含了处理这些文件所需的各种Apache ...
- **读写Word和PowerPoint**: 虽然不如Excel那样广泛使用,但POI也提供了处理Word文档(段落、表格、图片等)和PowerPoint演示文稿(幻灯片、形状、文本框)的功能。 在使用Apache POI时,需要注意的是,由于处理...
1. **读取Word文档** - 使用 Apache POI 库中的 `HWPFDocument` 类可以处理 `.doc` 文件,而 `XWPFDocument` 类则用于 `.docx` 文件。例如,你可以通过 `WordExtractor` 来提取文档中的文本内容。 ```java import...
使用POI读取PPT/PPTX文档的基本步骤如下: 1. **添加依赖**:将精简版POI库添加到项目的build.gradle文件中,然后同步构建,确保库已成功导入。 2. **创建输入流**:获取到PPT或PPTX文件的InputStream。这可以通过...
2. **Word处理**: 对于Word文档,POI允许开发者创建新的文档、段落、表格、图片等,并且可以读取和更新现有文档的内容和样式。 3. **PowerPoint处理**: 对PowerPoint的支持包括创建、编辑幻灯片、文本框、图片、...
这个"poi-4.1.1.rar"压缩包包含的是Apache POI库的4.1.1版本,它是Java开发者用来在程序中读取、写入和操作Office文档的重要工具。 Apache POI 提供了丰富的API,使得Java程序员可以方便地与Excel文件进行交互。...