如何从 TableList POI 中移除/删除表格

2024-01-04

我正在使用模板 docx 文件来填充每个表上的数据,但在某些情况下我不想要同一个表,是否有使用可以删除/删除的 XWPFTable?


你可以试试

int position = document.getPosOfTable( table );
document.removeBodyElement( position );

这是一个示例,其中您提供一个模板文件(其中包含表格),程序删除第一个表格并保存文档。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

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

public class TableTest {

    public static void main( String[] args ) {

        String filename = "template.docx";

        try {
            FileInputStream in = new FileInputStream( new File( filename ) );
            XWPFDocument document = new XWPFDocument( in );

            showTablesInfo( document );

            // Deleting the first table of the document
            deleteOneTable( document, 0 );

            showTablesInfo( document );

            saveDoc( document, "template after processing.docx" );

        } catch ( FileNotFoundException e ) {
            System.out.println( "File " + filename + " not found." );
        } catch ( IOException e ) {
            System.out.println( "IOException while processing file " + filename + ":\n" + e.getMessage() );
        }
    }

    private static void showTablesInfo( XWPFDocument document ) {
        List<XWPFTable> tables = document.getTables();
        System.out.println( "\n document has " + tables.size() + " table(s)." );

        for ( XWPFTable table : tables ) {
            System.out.println( "\t table with position #" + document.getPosOfTable( table ) + " has "
                    + table.getRows().size() + " rows" );
        }
    }

    /**
     * Deletes a table, given its relative position in document.
     */
    private static void deleteOneTable( XWPFDocument document, int tableIndex ) {
        try {
            int bodyElement = getBodyElementOfTable( document, tableIndex );
            System.out.println( "deleting table with bodyElement #" + bodyElement );
            document.removeBodyElement( bodyElement );
        } catch ( Exception e ) {
            System.out.println( "There is no table #" + tableIndex + " in the document." );
        }
    }

    private static int getBodyElementOfTable( XWPFDocument document, int tableNumberInDocument ) {
        List<XWPFTable> tables = document.getTables();
        XWPFTable theTable = tables.get( tableNumberInDocument );

        return document.getPosOfTable( theTable );
    }

    private static void saveDoc( XWPFDocument document, String filename ) {
        try {
            FileOutputStream out = new FileOutputStream( new File( filename ) );
            document.write( out );
            out.close();
        } catch ( FileNotFoundException e ) {
            System.out.println( e.getMessage() );
        } catch ( IOException e ) {
            System.out.println( "IOException while saving to " + filename + ":\n" + e.getMessage() );
        }
    }

}

注意力! Method removeBodyElement of the XWPFDocument必须在循环遍历所有文档表的循环之外调用类。否则,您将面临以下风险:ConcurrentModificationException,因为删除一个表会影响文档中其他表的索引。

在上面的示例中,选择要删除的表的标准很简单:文档的第一个表。另一种提取方法XWPFTable要删除,正在编写一个小方法,该方法将获取第一行第一个单元格的文本(第一列的标题)等。希望这会有所帮助,祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 TableList POI 中移除/删除表格 的相关文章

  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • 在java中轮询Http服务器(重复发送http get请求)

    当对其进行 REST 调用时 我的 Web 服务器会发送一些信息 我想不断轮询该服务器 间隔5秒后重复发送HTTP GET请求 以检查返回的信息是否有任何变化 做到这一点最有效的方法是什么 您能提供一些代码示例吗 请注意 我只想开发客户端代
  • 我是否需要安装 SQLite 才能使 SQLiteJDBC 正常工作?

    我想我只是没有 明白 如果我的计算机上尚未安装 SQLite 并且我想编写一个使用嵌入式数据库的 Java 应用程序 并且我将 SQLiteJDBC JAR 下载 导入到我的项目中 那么这就是我所需要的吗 或者 我是否需要先安装 SQLit
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也

随机推荐

  • CallerInfo,获取传递给方法的变量名称(如 nameof)

    public void Test string myString hello public void Method string text COnsole WriteLine text should print myString hello
  • iOS7 中 UIKeyboard 不会自动半透明

    据我了解 在 Xcode 5 和 iOS 7 项目中进行开发时 与 UITextField 交互时弹出的键盘应该是半透明的 并通过背景中的任何颜色显示 我的两个项目都不是这种情况 我有一个彩色且模糊的背景 我希望它能够通过键盘实现 但是键盘
  • 如何使用 EmberJS 扩展命名空间

    我用 Javascript 编程已经有一段时间了 最近 我做了一个相当大的 jQuery 项目 并应用了模块模式 如这篇精彩文章中所述 http www adequatelygood com 2010 3 JavaScript Module
  • 以管理员身份运行 R

    我使用自己的笔记本电脑安装 R 发现它只有一个库 即使这个图书馆仍然read only 每次我使用 Rstudio 时 install packages abc 我可以看到新的包自动存储到其中read only库文件夹 在我办公室的桌面上
  • 我的布局未在 Magento 管理视图中加载

    这是我的控制器
  • SDK 管理器无法启动 Windows 7 64 位?

    我知道这个问题之前已经被解决过几次 但我没有对一个旧问题发表评论 而是决定用 希望 更新的信息提出一个新问题 正如标题所示 无论我做什么 我都无法让 SDK Manager 运行 我尝试安装 32 位和 64 位版本的 jdk1 7 0 但
  • 如何使用 NSUserDefaults 存储字典数组

    尝试存储字典数组NSUserDefaults var theTasks String Any num 1 title example colour red let defaults NSUserDefaults standardUserDe
  • 如何使用 ColdFusion 从 XML 字符串中删除所有多余的空格?

    我从客户端收到一个 XML 字符串 格式如下
  • web.xml 中的 Struts2 配置文件名

    http struts apache org 2 3 1 2 docs webxml html http struts apache org 2 3 1 2 docs webxml html 根据上面的链接我们可以在web xml中指定配置
  • 在单独的线程上捕获未处理的异常

    我正在使用以下事件来捕获主 UI 线程中未处理的异常 Application ThreadException 不幸的是 它无法在单独的线程中捕获那些未处理的错误 我知道 AppDomain CurrentDomain UnhandledEx
  • 如何将仓位策略添加到 Angular CDK 叠加层?

    如何添加定位策略 ConnectedPositionStrategy 到 Angular CDK 覆盖 我尝试通过指定它positionStrategy属性并将其传递给overlay create import Overlay Connec
  • 如何获取生成表的行表示?

    我想要得到Row N lt gt 生成的 JOOQ 表类型的表示 我想在这种情况下使用它 val p PROJECTS as p val pmu PROJECTMEMBERUSERS as pmu val query db select p
  • 提取所有 JSON 密钥

    我有一个 JSON 列j like a 2 b b1 3 b2 5 c 3 a 5 d 1 c 7 如何从 Presto 获取所有不同的 顶级 键名称 IE 我喜欢 select distinct foo j 回来 a b c d 请注意
  • Fetch Type LAZY 仍然会导致急切加载 Hibernate Spring 数据

    我使用 Spring 数据创建了一个简单的 Spring boot 项目 我有一个与标签具有一对多关系的 TagGroup 实体 Entity Table name TAG GROUP public class TagGroup OneTo
  • moz变换比例减小div大小问题

    我在 mozilla moz transform 缩放属性方面遇到问题 我正在寻找 Zoom 属性的替代品 它在除 Firefox 之外的所有平台上都能正常工作 当我想缩小 div 时 它的 内容 确实缩小了 但容器的大小保持不变 在其他内
  • 在 JavaScript 正则表达式匹配中移动索引

    我有这个正则表达式来从文本中提取双词 A Za z s A Za z g 以及这个示例文本 Mary had a little lamb 我的输出是这样的 0 Mary had 1 a little 而我的预期输出是这样的 0 Mary h
  • 设置远程共享继承其父目录权限的 C# 代码

    我有两台计算机 分别称为客户端和服务器 位于 Windows 域中 服务器有一个可以从客户端计算机访问的共享目录 我想在客户端上运行一个 C 应用程序 该应用程序设置此共享的权限以继承服务器上共享的父目录的权限 我该怎么做呢 我已经尝试过以
  • 在 Google Cloud Storage 存储桶上设置缓存控制

    我有一个存储桶 其中包含经常更新的公共图像 并且希望禁用默认缓存持续时间 3600 例如 Cache Control private max age 0 no transform 使用 PHP 上传文件时可以设置缓存控制吗 有没有办法为存储
  • git 如何检测文件已被修改?

    git 如何如此快地检测到文件修改 它是否对存储库中的每个文件进行哈希处理并比较 SHA1 这会花费很多时间 不是吗 或者说比较atime ctime or mtime Git 努力仅从 lstat 值中确信工作树与索引匹配 因为回退到文件
  • 如何从 TableList POI 中移除/删除表格

    我正在使用模板 docx 文件来填充每个表上的数据 但在某些情况下我不想要同一个表 是否有使用可以删除 删除的 XWPFTable 你可以试试 int position document getPosOfTable table docume