Quantcast
Channel: Open XML Format SDK forum
Viewing all articles
Browse latest Browse all 1288

Change underlying spreadsheet data for a PowerPoint chart

$
0
0

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);
        }


Viewing all articles
Browse latest Browse all 1288

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>