You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache POI提取PPT幻灯片折线图数据并保存为XLSX文件

实现方案:从PPTX折线图提取源数据导出为XLSX

核心逻辑

利用Apache POI对OOXML格式的原生支持,直接读取PPTX中折线图内嵌的关联Excel源数据工作簿,无需手动解析图表序列值、坐标轴标签等零散数据,准确率与原生数据源完全一致。

前置依赖

需要引入Apache POI核心依赖(推荐使用5.2.5稳定版):

<!-- Maven依赖示例 -->
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.5</version>
    </dependency>
</dependencies>

分步实现代码

  • 加载目标PPTX文件,定位到指定幻灯片
// 输入文件路径可根据实际场景修改
String pptxPath = "demo.pptx";
// 目标幻灯片索引从0开始,比如取第3张幻灯片对应索引为2
int targetSlideIndex = 2;

try (FileInputStream pptFis = new FileInputStream(pptxPath);
     XMLSlideShow ppt = new XMLSlideShow(pptFis)) {
    // 校验幻灯片索引合法性
    if (targetSlideIndex >= ppt.getSlides().size()) {
        throw new RuntimeException("幻灯片索引超出范围,文件总幻灯片数:" + ppt.getSlides().size());
    }
    XSLFSlide targetSlide = ppt.getSlides().get(targetSlideIndex);
}
  • 遍历幻灯片形状,定位目标折线图
XSLFLineChart targetLineChart = null;
for (XSLFShape shape : targetSlide.getShapes()) {
    // 图表属于图形框架类
    if (!(shape instanceof XSLFGraphicFrame)) {
        continue;
    }
    XSLFGraphicFrame graphicFrame = (XSLFGraphicFrame) shape;
    XSLFChart chart = graphicFrame.getChart();
    // 判断是否为折线图类型
    if (chart instanceof XSLFLineChart) {
        targetLineChart = (XSLFLineChart) chart;
        // 如果需要匹配特定标题的折线图,可在此处加判断:
        // if ("月度销量趋势".equals(chart.getChartText().getText())) { break; }
        break;
    }
}
if (targetLineChart == null) {
    throw new RuntimeException("指定幻灯片中未找到折线图");
}
  • 提取折线图关联的源数据工作簿
XSSFWorkbook sourceDataWb = null;
// 折线图的关联源数据是内嵌的XLSX格式工作簿,遍历获取即可
for (Map.Entry<PackagePart, PackagePartName> embedEntry : targetLineChart.getEmbeddedWorkbooks().entrySet()) {
    PackagePart wbPart = embedEntry.getKey();
    try (InputStream wbIs = wbPart.getInputStream()) {
        sourceDataWb = new XSSFWorkbook(wbIs);
        break;
    }
}
if (sourceDataWb == null) {
    throw new RuntimeException("未获取到折线图的关联源数据");
}
  • 保存源数据为独立XLSX文件
// 输出文件路径可根据实际场景修改
String outputXlsxPath = "折线图源数据.xlsx";
try (FileOutputStream xlsxFos = new FileOutputStream(outputXlsxPath)) {
    sourceDataWb.write(xlsxFos);
}
sourceDataWb.close();

注意事项

  • 幻灯片索引从0开始计数,第一张幻灯片对应索引0,需根据实际需求调整
  • 单幻灯片存在多个折线图时,可通过图表标题、所在位置等属性补充匹配规则,避免定位错误
  • 处理大体积PPTX时建议开启POI的临时文件配置,降低内存占用
  • 所有IO资源需通过try-with-resources自动关闭,避免资源泄漏

内容的提问来源于stack exchange,提问作者Varun Vijayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 05:54:05