gpt4 book ai didi

java - 未经编辑,无法在 pptx 中的 BarChart 中查看 Apache POI 更新的数据值

转载 作者:行者123 更新时间:2023-11-30 04:17:54 37 4
gpt4 key购买 nike

我有一个 pptx 模板,它只有 1 张幻灯片用于测试目的。该幻灯片有一个简单的条形图。我可以通过双击 pptx 文件来编辑条形图,并且可以更改 Sheet1(条形图数据表)中的值,并且我可以立即在 BarChart 中看到更改。

现在,我尝试使用 POI API 执行相同的操作。我在这里执行以下步骤

  1. 读取模板文件 = "MyTemplate.pptx"- https://docs.google.com/file/d/0B-q0lBy0lKLic3dCSUVsZUdGQzA/edit?usp=sharing
  2. 拥有 map 中的所有形状
  3. 通过引用 BarChart 形状的名称来读取它 - “MyBarChart”
  4. 读取BarChart的excel文件
  5. 更新 Sheet1 中的单元格值
  6. 保存所有内容并写入另一个文件 - “MyPresentation.pptx”

当我打开文件“MyPresentation.pptx”时,它不会在栏中预先显示更新的单元格值。我需要双击图表将其更改为编辑模式才能反射(reflect)最新的值。当使用 POI 更新基础数据表时,为什么 BarChart 没有刷新?

有什么建议可以解决这个问题吗?

这是完成的代码,还附有 pptx 模板文件。

package com.ppt;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFGraphicFrame;
import org.apache.poi.xslf.usermodel.XSLFShape;
import org.apache.poi.xslf.usermodel.XSLFSheet;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class PPTChart {

public static void main(String args[]) throws InvalidFormatException, IOException{

XMLSlideShow ppt;

// Read pptx template
ppt = new XMLSlideShow(new FileInputStream("MyTemplate.pptx"));

// Get all slides
XSLFSlide[] slide = ppt.getSlides();

// Get working slide that is slide=0
XSLFSlide slide0 = slide[0];
XSLFShape[] shapes = slide0.getShapes();

// Add all shapes into a Map
Map <String, XSLFShape> shapesMap = new HashMap<String, XSLFShape>();
for(XSLFShape shape : shapes)
{
shapesMap.put(shape.getShapeName(), shape);
System.out.println(shape.getShapeName() + " " + shape.getShapeId() + " " + shape);

}

// Read the bar chart
XSLFGraphicFrame chart = (XSLFGraphicFrame) shapesMap.get("MyBarChart");

// Get the chart sheet
XSLFSheet sheet = chart.getSheet();

for(int i=0; i<sheet.getRelations().size(); i++)
{
System.out.println("Partname =" + sheet.getRelations().get(i).getPackagePart().getPartName());



if(sheet.getRelations().get(i).getPackagePart().getPartName().toString().contains(".xls"))
{

System.out.println("Found the bar chart excel");

// BarChart Excel package part
PackagePart barChartExcel = sheet.getRelations().get(i).getPackagePart();

// Reference the excel in workbook
HSSFWorkbook wb = new HSSFWorkbook(barChartExcel.getInputStream());

// Read sheet where Barchart data is available
HSSFSheet mysheet = wb.getSheetAt(1);

// Read first
HSSFRow row = mysheet.getRow(1);


//Print first cell value for debugging
System.out.println("Updating cell value from - " + row.getCell(1));

// New value
double insertValue = 7777777.0;


wb.getSheetAt(1).getRow(1).getCell(1).setCellValue(insertValue);

// Set first BarChart as active sheet
HSSFSheet mysheet0 = wb.getSheetAt(0);
mysheet0.setActive(true);

// Write the updated excel back to workbook
OutputStream excelOut = barChartExcel.getOutputStream();
excelOut.flush();
wb.write(excelOut);
excelOut.close();

// Write workbook to file
FileOutputStream o = new FileOutputStream("MyPresentation.pptx");
ppt.write(o);
o.close();
System.out.println("new ppt is created....");

break; // Exit
}

}
}
}

最佳答案

我现在正在做类似的事情。查看下面的线程链接以实际更新图表视觉效果。您必须修改底层 XML 的绘图区域部分。

How can one programmatically read the graph values from a Powerpoint presentation using Apache's POI?

关于java - 未经编辑,无法在 pptx 中的 BarChart 中查看 Apache POI 更新的数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17890549/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com