Hi Vijay,
Thanks for providing us the template file.
Well, if you select the chart picture in the worksheet, you may see that the chart is expanded upto 7th row, so it is not contained in the 2nd row either. If you select the whole row(2nd row) manually in MS Excel and paste it somewhere in the sheet, the chart won't get copied either. Moreover, we also find an issue with CopyRow method regarding copying images/objects, we will look into it soon.
I think you may try to copy the row first and then copy the source picture to it. See the following sample code:
e.g
Workbook wb1 = new Workbook();
wb1.Open("c:\\Temp\\File3.xls");
wb1.Worksheets[0].Cells.CopyRow(wb1.Worksheets[0].Cells, 1, 17);
Picture source = wb1.Worksheets[0].Pictures[0];
MemoryStream ms = new MemoryStream(source.Data);
//Copy the picture
wb1.Worksheets[0].Pictures.Add(17, source.UpperLeftColumn, ms, source.WidthScale, source.HeightScale);
wb1.Save(path + "result.xls");
For further reference, please check the doc article: http://www.aspose.com/documentation/file-format-components/aspose.cells-for-.net-and-java/copy-shapes-between-worksheets.html
Also, I think you may try to create a range based on the cells in the sheet, create another range of cells, copy the first range into the second range.
e.g
// Get the first worksheet in the Excel file
Worksheet worksheet = wb1.Worksheets[0];
// Create a named range of the Cells
Range range1 = worksheet.Cells.CreateRange("A1", "Q7");
// Create another Range
Range range2 = worksheet.Cells.CreateRange("A17", "Q24");
// Copy the range
range2.Copy(range1);
This way everything (data, contents, drawing objects etc.) would get copied. But, it is to be noted here, the width/heights of the source cells in rows/columns are not copied and you have to manually set the width/heights of the destination cells. For reference, check: http://www.aspose.com/documentation/file-format-components/aspose.cells-for-.net-and-java/copying-rows-and-columns.html
Thank you.