I have the code below derived from the code by Eric White found at this location:
http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/03/28/132189.aspx
I have been able to change the data which causes the chart to display, but not to change the underlying spreadsheet.
If this can't be made to work I would like to find a way to replace the entire embedded spreadsheet.
public static void UpdatePieChart(PresentationDocument myPres, SlidePart inSlidePart, int inSlideNumber, int ChartNDX, List<PieChartSourceRec> inDataList ) { ChartPart mChartPart = inSlidePart.ChartParts.ElementAt<ChartPart>(ChartNDX); C.ExternalData ed = mChartPart .ChartSpace .Elements<C.ExternalData>() .FirstOrDefault(); EmbeddedPackagePart epp = (EmbeddedPackagePart)mChartPart .Parts .Where(pt => pt.RelationshipId == ed.Id) .FirstOrDefault() .OpenXmlPart; Stream str = epp.GetStream(); MemoryStream ms = new MemoryStream(); CopyStream(str, ms); SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(ms, true); WorkbookPart wbPart = spreadsheetDoc.WorkbookPart; ss.Sheet theSheet = wbPart.Workbook.Descendants<ss.Sheet>().FirstOrDefault(); string sheetId = theSheet.Id; var mSharedStringTable = spreadsheetDoc.WorkbookPart.SharedStringTablePart.SharedStringTable; WorksheetPart wsp = (WorksheetPart)spreadsheetDoc .WorkbookPart .Parts .Where(pt => pt.RelationshipId == sheetId) .FirstOrDefault() .OpenXmlPart; ss.SheetData sd = wsp .Worksheet .Elements<ss.SheetData>() .FirstOrDefault(); int ndx = 1; var mm = sd.Descendants<ss.Row>(); foreach (PieChartSourceRec pcsr in inDataList) { ss.Row rRow = sd .Elements<ss.Row>() .Skip(ndx) .FirstOrDefault(); if (rRow != null) { ss.CellValue cell1value = rRow .Elements<ss.Cell>() .ElementAt(1) .Elements<ss.CellValue>() .FirstOrDefault(); cell1value.Text = pcsr.Value.ToString(); } ndx++; } str = epp.GetStream(); ms.WriteTo(str); }