Aspose slides java V22.5修改数据之后,生成的PPT不双击打开,数据不进行刷新

我在使用aspose slides java V22.5插入ole对象时,修改ole的xlsx表格数据后,生成的ppt在不双击打开该ole对象时,数据不进行刷新,有没有办法解决呢?代码.jpg (161.9 KB)OleEdit_out.zip (40.9 KB)

@SalesDhorde,
感谢您联系支持人员。请分享以下内容:

  • 您使用的 a.pptx 文件
  • 可编译的代码示例(作为文本)

新建 Microsoft Word 文档.docx (13.1 KB)a.zip (54.4 KB)

@SalesDhorde,
感谢您提供额外的数据。我已将修改后的 Excel 工作簿保存到这样的文件中:

Wb.save("changed.xlsx", so1);

我在没有任何数据的情况下得到了以下结果:changed.zip (9.4 KB)

我来自 Aspose.Cells 团队的同事将进一步帮助您解决这个问题。
@amjad.sahi, 请注意。

@SalesDhorde,

我使用您的示例 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)