我在使用aspose slides java V22.5插入ole对象时,修改ole的xlsx表格数据后,生成的ppt在不双击打开该ole对象时,数据不进行刷新,有没有办法解决呢?代码.jpg (161.9 KB)OleEdit_out.zip (40.9 KB)
@SalesDhorde,
感谢您提供额外的数据。我已将修改后的 Excel 工作簿保存到这样的文件中:
Wb.save("changed.xlsx", so1);
我在没有任何数据的情况下得到了以下结果:changed.zip (9.4 KB)
我来自 Aspose.Cells 团队的同事将进一步帮助您解决这个问题。
@amjad.sahi, 请注意。
我使用您的示例 PPTX 文件测试了您的场景/案例。 我还发现,无需双击 OLE 对象,它就会在输出(生成的)PPTX 文件中显示较旧的数据。 我认为您需要通过 Aspose.Cells for Java API 将更新的数据图片获取/渲染到流中,然后通过 Aspose.Slides for Java 设置此图像流用于 OLE 对象框架。 请参阅以下(更新后的)示例代码,该代码在我测试时工作正常:
例如
示例代码:
com.aspose.slides.Presentation pres = new com.aspose.slides.Presentation("f:\\files\\a.pptx");
com.aspose.slides.ISlide sld = pres.getSlides().get_Item(0);
com.aspose.slides.IShapeCollection shapes = sld.getShapes();
for (com.aspose.slides.IShape shape : shapes) {
if (shape instanceof com.aspose.slides.IOleObjectFrame) {
com.aspose.slides.IOleObjectFrame oleObjectFrame = (com.aspose.slides.IOleObjectFrame) shape;
ByteArrayInputStream msln = new ByteArrayInputStream(oleObjectFrame.getEmbeddedData().getEmbeddedFileData());
Workbook Wb = new Workbook(msln);
ByteArrayOutputStream msout = new ByteArrayOutputStream();
// Modifies the workbook data
Wb.getWorksheets().get(0).getCells().get(0, 4).putValue("E");
Wb.getWorksheets().get(0).getCells().get(2, 4).putValue(12);
Wb.getWorksheets().get(0).getCells().get(3, 4).putValue(14);
Wb.getWorksheets().get(0).getCells().get(4, 4).putValue(15);
oleObjectFrame.setUpdateAutomatic(Boolean.TRUE);
// set visible rows and columns count for the picture
int cellsRows = 10;
int cellsCols = 9;
Worksheet dataSheet = Wb.getWorksheets().get(0);
// Set print area
dataSheet.getPageSetup().setPrintArea(dataSheet.getCells().get(0, 0).getName() + ":"
+ dataSheet.getCells().get(cellsRows + 1, cellsCols).getName());
// Set ole size
Wb.getWorksheets().setOleSize(0, cellsRows, 0, cellsCols);
// Get the worksheet as an image
ImageOrPrintOptions imageOptions = new ImageOrPrintOptions();
imageOptions.setImageType(ImageType.PNG);
imageOptions.setOnlyArea(true);
SheetRender sheetRender = new SheetRender(dataSheet, imageOptions);
ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
sheetRender.toImage(0, imageStream);
byte[] imageByteArray = imageStream.toByteArray();
OoxmlSaveOptions so1 = new OoxmlSaveOptions(com.aspose.cells.SaveFormat.XLSX);
Wb.save(msout, so1);
// Changes Ole frame object data and set the updated data picture for OLE object
com.aspose.slides.IOleEmbeddedDataInfo newData = new com.aspose.slides.OleEmbeddedDataInfo(msout.toByteArray(), oleObjectFrame.getEmbeddedData().getEmbeddedFileExtension());
oleObjectFrame.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(imageByteArray));
oleObjectFrame.setEmbeddedData(newData);
oleObjectFrame.setUpdateAutomatic(Boolean.TRUE);
System.out.println(Wb.getWorksheets().get(0).getCells().get(0, 0).getValue());
}
}
pres.save("f:\\files\\22OleEdit_out1.pptx", com.aspose.slides.SaveFormat.Pptx);
请参阅随附的输出 PPTX 文件以供参考。
22OleEdit_out1.zip (53.3 KB)