关于java使用POI导出ppt ,其中表格setText 失败问题

1、导出ppt 必要的包

使用maven

 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>3.9</version>
     <exclusions>
         <exclusion>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml-schemas</artifactId>
         </exclusion>
     </exclusions>
 </dependency>
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>ooxml-schemas</artifactId>
     <version>1.1</version>
 </dependency>   

2、poi-ooxml-schemas 和 ooxml-schemas 的区别

http://blog.sina.com.cn/s/blog_801b121d0102x3fa.html

3、应用

3.1、表格操作

 public void parsing(XSLFSlide slide, XSLFTable table) {
        //for循环增加数据,忽略标题行
        List<XSLFTableRow> tableRow = table.getRows();
        List<XSLFTableCell> cells = tableRow.get(1).getCells();

        while(table.getRows().size()<tableData.getRows()){
            XSLFTableRow row = table.addRow();
            for (int i1 = 0; i1 < cells.size(); i1++) {
                row.addCell();

            }

        }

        for (int i = 0; i < tableData.getRows(); i++) {
            for (int i1 = 0; i1 < tableData.get(i).size(); i1++) {
                String key = tableData.get(i).get(i1);
                if(table.getRows().get(i + 1).getCells().size()<i1+1){
                    table.getRows().get(i + 1).addCell();
                }
                table.getRows().get(i + 1).getCells().get(i1).setText(key);
            }
        }

    }

  git项目:https://code.aliyun.com/1003771635/document.git

  在子项目 pptXSLF 中。

3.2、替换图片操作

  插入图片自己查资料,这里不提

  这里只说读取模板ppt,并替换特定区域成图片。

if(shape[i] instanceof XSLFAutoShape){
    XSLFAutoShape txShape = (XSLFAutoShape) shape[i];
    if (txShape.getText().contains("{pic}")) {
    byte[] pictureData = new byte[0];
    try {
        if(imageIndex>inputStreamList.size()-1){
            continue;
        }
        pictureData = IOUtils.toByteArray(inputStreamList.get(imageIndex++));
    } catch (IOException e) {
        e.printStackTrace();
    }
    int idx = slide.getSlideShow().addPicture(pictureData, XSLFPictureData.PICTURE_TYPE_PNG);
    XSLFPictureShape pic = slide.createPicture(idx);
    // 设置XSLFPictureShape的位置信息
    pic.setAnchor(txShape.getAnchor());
    // 移除XSLFTextShape
    slide.removeShape(txShape);
}

其中 imageIndex 表示我图片流的位置,因为我兼容多张图片替换,所以根据查找到的图形的,依次替换。

XSLFAutoShape 表示,图形图片,例如以下我使用的图片,中间{pic}表示我要替换成图片的意思,详细看代码。

3.3、文本操作(略过)

4、问题汇总

  4.1、表格 setText  失败问题

    可能是因为 poi-ooxml-schemas.jar 包,出现bug 的问题。4.0版本以下poi-ooxml-schemas都出现setText 失败问题。4.0版本以上 可能是修复好了。

    4.1.1、解决方案有两种:

      ① 使用poi-ooxml-schemas 4.0以上版本

      ② 使用ooxml-schemas 版本,移除 poi-ooxml-schemas 版本 ,两个区别可以参考 第2标题。

5、个人说明

  如果你们发现其他问题或者解决方法,可以在评论区里提出。

原文地址:https://www.cnblogs.com/alvis128/p/10320436.html

时间: 2024-10-10 21:19:45

关于java使用POI导出ppt ,其中表格setText 失败问题的相关文章

java 利用poi导出默认以表格展示的excel透视表

前言: 从前,我是一个前端程序猿,怀着对打通任(前)督(后)二(开)脉(发)的梦想转了后端,自学两礼拜java+spring全家桶,直接上项目实战.最近接到一需求:将业务数据导出一张透视表. 需求开发完成已近有一段时间了,甲方的大爷大妈,爷爷奶奶们也都用的很开心,我也很开心,于是就心想咱学了也不能白学,所以写下这篇随笔. 先看下用easypoi+POI导出的excel效果图(easypoi用来导出sheet1数据源,poi用来sheet0透视表): 图中的excel分为两个sheet, shee

JAVA关于POI导出Excel内存溢出的解决方案

JAVA关于POI导出Excel内存溢出的解决方案 在我们使用JAVA开发过程中,经常要导出查询获得的数据,这些数据一般情况下都是以Excel存储的,因此我们在导出数据的时候要使用JAVA的POI库,其主要是对各种windows平台的数据格式进行操作,在这里,我们是对Excel操作. 生成Excel的过程原理是这样的,首先,我们对数据库进行查询,获取相应的结果集,一般是list集合,然后生成Workbook对象,根据生成的Workbook对象获取sheet对象,根据此sheet对象获取Row对象

java excel poi导出问题

1.每次打开excel就会提示:"此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数.关闭其他文档再试一次可能有用." 解决办法:是因为创建的字体太多了,当调用HSSFWorkbook的createFont之后就创建一种字体,就算字体属性完全一样也是要创建一个新字体对象的: 而创建的数目是有限的,因此不要频繁调用HSSFWorkbook的createFont方法, 把创建的font缓存起来,相同字体属性的就不要再create了 粘贴的内容中由于格式或数据问题,可能引发了E

java利用poi来读取execl表格返回对象

利用poi来读取execl表格,返回一个对象(可能有点不完善,但是应该能满足平常的所用),用到了反射等等; 使用的jar包有: commons-collections4-4.1.jar poi-3.17.jar poi-ooxml.3.17.jar poi-ooxml-schemas.3.17.jar xmllbeans-2.6.0.jar /** * 静态属性包 * @author Administrator * */public class Common { public static fi

java 使用POI导出百万级数据

先看结果吧,这只是测试其中有很多因数影响了性能. 表总数为:7千多万,测试导出100万 表字段有17个字段 最终excel大小有60多兆 总耗时:126165毫秒 差不多2分多钟 其核心简单来说就是分批写入,就是分页一样.这样的好处就是不会内存溢出. (真的不会写博客...) 直接上代码了 public void download(HttpServletResponse response) throws Exception{ // 一次读取的数量 int listCount = 200000;

Java实现POI导出Excel

Web框架为Struts2,所用jar包如下: ExportExcelAction.java import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.

Java实现POI导出Excel报表功能

在公司的很多业务中需要做成报表的形式,在市场有很多开源的Java框架,例如POI.JXL等,下面我们结合SpringMVC框架,来实现报表导出功能 首先在项目的lib目录下面加入poi-3.7.jar 核心工具类: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputSt

java利用poi导出数据到excel

背景: 上一篇写到利用jtds连接数据库获取相应的数据,本篇写如何用poi将数据到处到excel中,此程序为Application 正文: 第三方poi jar包:poi驱动包下载 代码片段: /** * 将数据导出到excel中 * @param data 将要被导入到excel中的数据 * @throws IOException */ public void crateTempFile(ArrayList<LinkedHashMap<String, String>> data)

java apache poi 导出excel

不说废话,帖代码 引入架包:poi-3.12-20150511.jar   poi-ooxml-3.12-20150511.jar 管网可以下载 try{          FLogicDataset<FDataInfoDeviceBrowserUnit> unitlist = _deviceBrowserConsole.select(logicContext);          //创建新的Excel工作薄           HSSFWorkbook workbook = new HSS