使用 Apache Poi 从 ppt 检索命名文本框

安迪

我有一个名为 TextBoxes 的 powerpoint 演示幻灯片。我希望能够在特定命名的 textBox 中更改 Java 应用程序中的文本。我在 Excel 中做了类似的事情,我有一个方法接受一个表示名称的字符串,然后遍历 Excel 工作表中的每个文本框,并将文本框的名称与提供的名称进行比较,并返回文本框对象。我为 Powerpoint 使用了类似的代码,但它不起作用。在编写下面的测试例程时,我发现 .getShapeName() 基本上返回 shapeType 而不是我在 ppt 中给它的实际名称。

谁能帮我找到一种方法来获取 ppt 文本框的名称?

private void getTextBox() {
    for (HSLFShape myShape : slide.getShapes()) {
        if (myShape instanceof HSLFTextBox) {
            myTextBox = (HSLFTextBox) myShape;
            System.out.println(myTextBox.getShapeName() + " " + myTextBox.getShapeType());
        }
    }
}

此例程输出以下内容:

文本框 TEXT_BOX

文本框 TEXT_BOX

文本框 TEXT_BOX

文本框 TEXT_BOX

文本框 TEXT_BOX

奇异果

这似乎是 HSLF 中的错误,因为当前的实现没有意义,即在调用 getShapeName() 时返回形状类型的名称:(
我将在下一个版本中修复此问题,即 POI 4.0.1 .

作为一种解决方法,您可以使用以下方法:

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.ddf.EscherComplexProperty;
import org.apache.poi.ddf.EscherProperties;
import org.apache.poi.hslf.usermodel.HSLFShape;
import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.util.StringUtil;

public class ShapeName {
    public static void main(String[] args) throws IOException {
        FileInputStream is = new FileInputStream("shapeName.ppt");
        HSLFSlideShow ppt = new HSLFSlideShow(is);
        is.close();

        HSLFSlide slide = ppt.getSlides().get(0);

        for (HSLFShape shape : slide.getShapes()) {
            EscherComplexProperty ep = HSLFShape.getEscherProperty(shape.getEscherOptRecord(), EscherProperties.GROUPSHAPE__SHAPENAME);
            String name;
            if (ep != null) {
                name = StringUtil.getFromUnicodeLE(ep.getComplexData());
            } else {
                name = shape.getShapeName()+shape.getShapeId();
            }
            System.out.println(name);
        }

        ppt.close();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Apache POI PPT API设置文本字体?

来自分类Dev

在Grails应用程序中使用Apache POI生成PPT

来自分类Dev

在Grails应用程序中使用Apache POI生成PPT

来自分类Dev

使用Apache POI的PatternSyntaxException

来自分类Dev

使用`Replace()`方法不会替换Apache POI中的文本

来自分类Dev

使用Java中的Apache POI读取上标Excel文本

来自分类Dev

使用Apache_poi删除包含特定文本的Excel行

来自分类Dev

如何使用 Apache POI 添加上标文本

来自分类Dev

在 apache poi 中使用 for 循环

来自分类Dev

Apache Felix与Apache POI的配合使用

来自分类Dev

Apache Felix与Apache POI的配合使用

来自分类Dev

Apache POI-尝试使用POI更改强调色

来自分类Dev

如何在OSGi中使用Apache POI

来自分类Dev

使用Apache POI逐列编写

来自分类Dev

如何在Apache Poi上使用子表?

来自分类Dev

使用Apache POI将整个行加粗

来自分类Dev

如何使用Apache POI删除行

来自分类Dev

使用Apache POI在Excel中删除多行

来自分类Dev

使用Apache POI打开xls和xlsx

来自分类Dev

Coldfusion:使用Apache POI事件API

来自分类Dev

使用Apache poi设置边距

来自分类Dev

如何使用Apache POI读取特定行?

来自分类Dev

使用Apache POI环阵列数据

来自分类Dev

使用Apache POI读取.docx文件

来自分类Dev

如何使用Apache POI删除行

来自分类Dev

使用Apache POI以Java导出到Excel

来自分类Dev

如何在OSGi中使用Apache POI

来自分类Dev

无法使用Apache POI从Excel文件读取

来自分类Dev

使用Apache POI编辑Word文档