We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

Avoiding "Object Changed" by image

Purpose of code is to take : embed excel sheet with data in to PPT as ole.

In my attempt to avoid "Object Changed" screen i get null in this line below.

Bitmap imgChart = wb.Worksheets[0].SheetToImage();

I dont know why. Can you explain why and how to accomplish this task. Below is my entire code.

Thanks,

public static void Run()

{

//Step - 1: Create an excel chart using Aspose.Cells

//--------------------------------------------------

//Create a workbook

Workbook wb = new Workbook();

//Add an excel chart

int chartRows = 5; // 55;

int chartCols = 5;// 25;

int chartSheetIndex = AddExcelChartInWorkbook(wb, chartRows, chartCols);

//Step - 2: Set the OLE size of the chart. using Aspose.Cells

//-----------------------------------------------------------

wb.Worksheets.SetOleSize(0, chartRows, 0, chartCols);

//Step - 3: Get the image of the chart with Aspose.Cells

//-----------------------------------------------------------

//Bitmap imgChart = wb.Worksheets[chartSheetIndex].Charts[0].ToImage();

Bitmap imgChart = wb.Worksheets[0].SheetToImage();

//Save the workbook to stream

MemoryStream wbStream = wb.SaveToStream();

//Step - 4 AND 5

//-----------------------------------------------------------

//Step - 4: Embed the chart as an OLE object inside .ppt presentation using Aspose.Slides

//-----------------------------------------------------------

//Step - 5: Replace the object changed image with the image obtained in step 3 to cater Object Changed Issue

//-----------------------------------------------------------

//Create a presentation

Presentation pres = new Presentation();

Slide sld = pres.GetSlideByPosition(1);

//Add the workbook on slide

AddExcelChartInPresentation(pres, sld, wbStream, imgChart);

//AddExcelChartInPresentation(pres, sld, wbStream);

//Step - 6: Write the output presentation on disk

//-----------------------------------------------------------

pres.Write("c:\\out2.ppt");

}

static int AddExcelChartInWorkbook(Workbook wb, int chartRows, int chartCols)

{

//Array of cell names

string[] cellsName = new string[]

{

"A1", "A2", "A3", "A4",

"B1", "B2", "B3", "B4",

"C1", "C2", "C3", "C4",

"D1", "D2", "D3", "D4",

"E1", "E2", "E3", "E4"

};

//Array of cell data

int[] cellsValue = new int[]

{

67,86,68,91,

44,64,89,48,

46,97,78,60,

43,29,69,26,

24,40,38,25

};

//Add a new worksheet to populate cells with data

int dataSheetIdx = wb.Worksheets.Add();

Worksheet dataSheet = wb.Worksheets[dataSheetIdx];

string sheetName = "DataSheet";

dataSheet.Name = sheetName;

//Populate DataSheet with data

for (int i = 0; i < cellsName.Length; i++)

{

string cellName = cellsName[i];

int cellValue = cellsValue[i];

dataSheet.Cells[cellName].PutValue(cellValue);

}

//Set ChartSheet an active sheet

wb.Worksheets.ActiveSheetIndex = dataSheetIdx;

return dataSheetIdx;

}

static void AddExcelChartInPresentation(Presentation pres, Slide sld, Stream wbStream)

{

//int slideWidth = pres.SlideSize.Width;

//int slideHeight = pres.SlideSize.Height;

int slideWidth = 2000;

int slideHeight = 2000;

int x = 0;

byte[] chartOleData = new byte[wbStream.Length];

wbStream.Position = 0;

wbStream.Read(chartOleData, 0, chartOleData.Length);

OleObjectFrame oof = sld.Shapes.AddOleObjectFrame(x, 10, slideWidth, slideHeight,

"Excel.Sheet.8", chartOleData);

}

static void AddExcelChartInPresentation(Presentation pres, Slide sld, Stream wbStream, Bitmap imgChart)

{

Aspose.Slides.Picture pic = new Aspose.Slides.Picture(pres, imgChart);

int picId = pres.Pictures.Add(pic);

int slideWidth = pres.SlideSize.Width;

int slideHeight = pres.SlideSize.Height;

int x = 0;

byte[] chartOleData = new byte[wbStream.Length];

wbStream.Position = 0;

wbStream.Read(chartOleData, 0, chartOleData.Length);

OleObjectFrame oof = sld.Shapes.AddOleObjectFrame(x, 0, slideWidth, slideHeight,

"Excel.Sheet.8", chartOleData);

oof.PictureId = picId;

}

}

I found my problem, ignore the earlier comment.