Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用apache poi在word文档中特定位置插入表格

使用apache poi在word文档中特定位置插入表格
EN

Stack Overflow用户
提问于 2015-08-05 14:36:13
回答 3查看 13.2K关注 0票数 1

我正在从事一个项目,其中我试图创建一个自动报告生成器。我需要找出几个特定的段落,删除已经存在的表,然后插入一个新的表。

到目前为止,一切都运行得很完美。我甚至设法在我想要的地方插入了一个示例文本,但是...不管我怎么做,所有的表格都放在文档的末尾。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class InsertText {
    public static void main(String[] args) throws FileNotFoundException, IOException,
            InvalidFormatException {
        try {
            FileInputStream fis = new FileInputStream("c:\\Work\\current\\***.docx");
            XWPFDocument document = new XWPFDocument(OPCPackage.open(fis));
            fis.close();
            System.out.println(document.getDocument().getBody().getPArray().length);
            List<IBodyElement> elements = document.getBodyElements();
            for (int n = 0; n < elements.size(); n++) {
                IBodyElement element = elements.get(n);
                if (element instanceof XWPFParagraph) {
                    XWPFParagraph p1 = (XWPFParagraph) element;
                    List<XWPFRun> runList = p1.getRuns();
                    StringBuilder sb = new StringBuilder();
                    for (XWPFRun run : runList)
                        sb.append(run.getText(0));
                    if (sb.toString().contains("????")) {
                        n++;
                        element = elements.get(n);
                        if (element instanceof XWPFTable) {
                            XWPFTable t = (XWPFTable) element;
                            XmlCursor cursor = t.getCTTbl().newCursor();
                            document.removeBodyElement(n);
                            XWPFParagraph p = document.insertNewParagraph(cursor);
                            XWPFRun run = p.createRun();
                            run.setText("GOAL!!!");
                            XWPFTable t2 = document.createTable(3,4);
                            XWPFTableCell cell = t2.getRow(0).getCell(0);
                            document.insertTable(n, t2);
                            cell.setText("GOAL!!!");
                            t2 = p.getBody().insertNewTbl(cursor);
                        }
                    }
                }
            }
            FileOutputStream outStream = new FileOutputStream("C:/Work/Current/**.docx");
            document.write(outStream);
            outStream.close();
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-06 07:25:45

事实证明,您不能将一个游标用于多个目的,所以我所需要做的就是为我将来的表创建一个新的游标。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
run.setText("GOAL!!!");
cursor = p.getCTP().newCursor();//this is the key!
XWPFTable t2 = document.insertNewTbl(cursor);
XWPFTableCell cell = t2.getRow(0).getCell(0);
cell.setText("GOAL!!!");
票数 1
EN

Stack Overflow用户

发布于 2015-11-23 11:23:55

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//first row
XWPFTableRow  rowOfOriginalTable  = theOriginalTable.getRow(0); 

//second cell of the first row
XWPFTableCell cellOfOriginalTable = rowOfOriginalTable.getCell(1);

//new paragraph in that cell
XWPFParagraph p = cellOfOriginalTable.addParagraph();

//get the cursor of the new paragraph
XmlCursor cursor = p.getCTP().newCursor();

//add the nested Table
XWPFTable nestedTable = p.getBody().insertNewTbl(cursor);

//add the first row to the nested table
XWPFTableRow rowOfNestedTable = nestedTable.createRow();

//add a cell to the first row
XWPFTableCell cellOfNestedTable = rowOfNestedTable.createCell();

//add a value
cellOfNestedTable.setText("Cell 0,0");

//add another cell
cellOfNestedTable = rowOfNestedTable.createCell();
cellOfNestedTable.setText("Cell 0,1");


//add another cell and rows
rowOfNestedTable = nestedTable.createRow();
cellOfNestedTable = rowOfNestedTable.getCell(0);
cellOfNestedTable.setText("Cell 1,0");

cellOfNestedTable = rowOfNestedTable.getCell(1);
cellOfNestedTable.setText("Cell 1,1");

cellOfOriginalTable.addParagraph();
票数 6
EN

Stack Overflow用户

发布于 2018-01-05 11:23:24

这将在给定位置插入一个表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CTTbl inserted = doc.getDocument().getBody().insertNewTbl(position);    
XWPFTable newTable = new XWPFTable(inserted, doc);

其中doc是XWPFDocument对象,position是您在其他表中的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31835579

复制
相关文章
【opencv】cv::Mat 公有属性 (Public Attributes)
创建一个5×5×3的3维矩阵,数据类型为8bit无符号数,初始值都为(0,0,255):
JNingWei
2020/03/12
1.5K0
【opencv】cv::Mat 图像格式 (Data Type)
由于 at 方法接受的是 uchar 这样的数据类型,而非 CV_8U。 若是要使用 at 方法访问数据元素,在已知通道数和每个通道数据类型的情况下,指定给 at 方法的数据类型如下表所示:
JNingWei
2020/03/12
8.1K0
【opencv】cv::Mat 公有成员函数 (Public Member Func)
用来度量每一个像素中每一个通道的精度,但它本身与图像的通道数无关。 depth数值越大,精度越高。 Mat.depth()得到的是一个0~6的数字,分别代表不同的位数,对应关系如下:
JNingWei
2020/03/12
1.2K0
opencv 将内存中图片读入到mat矩阵
平常用的比较多的是 imread函数,直接将一个.jpg或者.bmp或者其他格式图片文件,读入到mat矩阵中。
战神伽罗
2019/07/22
4.1K0
将mat格式中加标签的数据分为:训练集、验证集、测试集
<span style="font-size:18px;">分出来的三个集合可能存在交集。</span> %%将一部分MontData 放入到OhmData里面 clear all;close all;clc; load Mont_data; kk1=randperm(size(train,1),2000); kk2=randperm(size(train,1),4000); kk3=randperm(size(train,1),5000); TempMontData1=train(kk1); TempMo
MachineLP
2022/05/09
8530
C++:Armadillo与OpenCV矩阵数据mat、vec、Mat的格式转换
  本文介绍在C++语言中,矩阵库Armadillo的mat、vec格式数据与计算机视觉库OpenCV的Mat格式数据相互转换的方法。
疯狂学习GIS
2023/06/26
3450
C++:Armadillo与OpenCV矩阵数据mat、vec、Mat的格式转换
Python - 读写 Matlab Mat 格式数据
如果 matlab 保存 data 时,采用的是 ‘-v7.3’,scipy.io.loadmat函数加载数据会出现错误:
AIHGF
2019/02/18
4.8K0
SD模块基础教程(三十九):将收货方分配给订货方
声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
4730
SD模块基础教程(十二):将工厂分配给销售组织/分销渠道
声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
5370
SD模块基础教程(十一):将销售组分配给销售办公室
声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
7350
使用MAT元数据匿名工具包
MAT:Metadata Anonymisation Toolkit 什么是元数据Metadata? 元数据是描述其它数据的数据(data about other data), 比如一张图片是图像数
Spaceack
2020/11/04
6220
使用MAT元数据匿名工具包
解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
全栈程序员站长
2022/09/28
5160
解决方案-vector初始化后存放Mat,出现Mat矩阵数据同变问题
MAT启动报错
下载Eclipse Memory Analyzer在mac上打开的时候出现以下异常:
JavaEdge
2021/02/22
8780
MAT启动报错
使用python读取matlab数据文件.mat
传送门 http://blog.stackoverflow.club/hdf5-usage/
羽翰尘
2019/11/19
2.5K0
OpenCV2 计算机视觉应用编程秘籍:1~5
本章将教您 OpenCV 的基本元素,并向您展示如何完成最基本的任务:读取,显示和保存图像。 在开始使用 OpenCV 之前,需要安装该库。 这是一个简单的过程,将在本章的第一部分中进行说明。
ApacheCN_飞龙
2023/04/27
3.1K0
SAP RETAIL MM41 不能将Class分配给商品主数据
我们知道在SAP制造业里,物料主数据有独立的分类视图(Classification View),用于将物料号分配物料Class或者批次Class.
SAP虾客
2021/10/08
4950
OpenCV中各种类型Mat数据读取
OpenCV中Mat作为图像容器对象,支持各种数据类型像素值的存储与读取,但是初学者经常因此被被搞得很头大,无法正确的读取不同类别的数据。本文就来详细解释一波各个数据类别,以及不同类别之间的数据转换,搞定Mat中的数据类型问题。
OpenCV学堂
2019/07/12
4.2K0
OpenCV中各种类型Mat数据读取
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )
内存泄漏原理 : 长生命周期对象 , 持有短生命周期对象的引用 , 并且是强引用持有 , GC 无法释放该短生命周期对象引用 , 造成 OOM ;
韩曙亮
2023/03/27
8.2K0
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )
Opencv中数据结构Mat的相关属性
剑影啸清寒
2018/01/02
2.1K0
Opencv中数据结构Mat的相关属性
点击加载更多

相似问题

读取数据cv::Mat

36

将多维cv::Mat转换为std::vector<cv::Mat>&

252

cv::Mat aaa()与cv::Mat aaa=cv::Mat()的区别;

11

断言失败CV_Assert( CV_IS_MAT(objectPoints) & CV_IS_MAT(imagePoints) & CV_IS_MAT(A) & CV_IS_MAT(rvec) & CV_IS_MAT(tvec) )

10

使用"const cv::Mat &“、"cv::Mat &”、"cv::Mat“或"const cv::Mat”作为函数参数的区别?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文