public static void generate3DPieChartForArea(Presentation pres, ISlide slide, Dictionary <string, Dictionary <string, decimal> > data) { int currentSlidePos = slide.SlideNumber - 1; int cy = data.Keys.Count / Constant.area3DPieChartCountShow; int mod = data.Keys.Count % Constant.area3DPieChartCountShow; int pieChartSlideCount = mod == 0 ? cy : cy + 1; List <string> dataKeys = data.Keys.ToList(); ChartProperty cp = new ChartProperty(); cp.y = 100; cp.height = 350; cp.width = 350; for (int j = 1; j <= pieChartSlideCount; j++) { List <string> tmpDataKeys = new List <string>(); Dictionary <string, decimal> dataSpecific = null; List <Dictionary <string, decimal> > tempDataSpecific = new List <Dictionary <string, decimal> >(); tmpDataKeys.Add(dataKeys[j * 2 - 2]); if (data.TryGetValue(dataKeys[j * 2 - 2], out dataSpecific)) { tempDataSpecific.Add(dataSpecific); } if (j * 2 - 1 < dataKeys.Count) { tmpDataKeys.Add(dataKeys[j * 2 - 1]); if (data.TryGetValue(dataKeys[j * 2 - 1], out dataSpecific)) { tempDataSpecific.Add(dataSpecific); } } if (j != 1) { ISlide CloneSlide = pres.Slides.AddClone(slide); pptxUtil.ReplaceTagForSlide(CloneSlide, Constant.pcaTemplatePrefix, ""); for (int index = 0; index < tempDataSpecific.Count; index++) { cp.x = 50 + index * cp.width + index * 20; cp.title = string.Format("{0} progress", tmpDataKeys[index]); add3DPieChartToSlide(CloneSlide, cp, tempDataSpecific[index]); } if (pres.Slides.Count - 1 > currentSlidePos + j) { pres.Slides.InsertClone(currentSlidePos + j - 1, CloneSlide); } CloneSlide.Remove(); } else { ISlide CloneSlide = pres.Slides.AddClone(slide); pptxUtil.ReplaceTagForSlide(CloneSlide, Constant.pcaTemplatePrefix, ""); for (int index = 0; index < tempDataSpecific.Count; index++) { cp.x = 50 + index * cp.width + index * 20; cp.title = string.Format("{0} progress", tmpDataKeys[index]); add3DPieChartToSlide(CloneSlide, cp, tempDataSpecific[index]); } pres.Slides.InsertClone(currentSlidePos, CloneSlide); CloneSlide.Remove(); } } slide.Remove(); }
private static void replaceAreaOutlineTemplate(Presentation pres, ISlide slide, Dictionary <string, Dictionary <string, decimal> > data) { ISlide lineSpecificSlide = null; ISlide outLineCloneSlide = null; ISlide areaSpecificSlide = null; ISlide linePieChartSlide = null; int lineIncreaseIndex = 0; List <string> areaKeys = data.Keys.ToList(); for (int ouIndex = 0; ouIndex < areaKeys.Count; ouIndex++) { Dictionary <string, decimal> preLineData = new Dictionary <string, decimal>(); Dictionary <string, decimal> curLineData = new Dictionary <string, decimal>(); int preSlideLineCount = 0; int curSlideLineCount = 0; if (ouIndex - 1 >= 0) { if (data.TryGetValue(areaKeys[ouIndex - 1], out preLineData)) { preSlideLineCount = preLineData.Count; } } if (data.TryGetValue(areaKeys[ouIndex], out curLineData)) { curSlideLineCount = curLineData.Count; } int currentIndex = slide.SlideNumber - 1; if (preSlideLineCount == 0) { lineSpecificSlide = pres.Slides[currentIndex + 2]; linePieChartSlide = pres.Slides[currentIndex + 3]; for (int k = 1; k < curSlideLineCount; k++) { pres.Slides.InsertClone(currentIndex + 2 * k + 1, linePieChartSlide); pres.Slides.InsertClone(currentIndex + 2 * k + 2, lineSpecificSlide); } lineIncreaseIndex += 2 * curSlideLineCount + 2; } else { outLineCloneSlide = pres.Slides.AddClone(slide); areaSpecificSlide = pres.Slides[currentIndex + 1]; lineSpecificSlide = pres.Slides[currentIndex + 2]; linePieChartSlide = pres.Slides[currentIndex + lineIncreaseIndex - 1]; string tmpAreaOutlineSpefic = string.Format("{0}. {1}", ouIndex + 1, areaKeys[ouIndex]); ReplaceTagForSlide(outLineCloneSlide, Constant.bodyTextForAreaTemplatePrefix, ""); ReplaceTagForSlide(outLineCloneSlide, Constant.aoTemplatePrefix, tmpAreaOutlineSpefic); pres.Slides.InsertClone(currentIndex + lineIncreaseIndex, outLineCloneSlide); pres.Slides.InsertClone(currentIndex + lineIncreaseIndex + 1, areaSpecificSlide); outLineCloneSlide.Remove(); for (int k = 1; k <= curSlideLineCount; k++) { int baseIndex = currentIndex + lineIncreaseIndex + 2 * k; pres.Slides.InsertClone(baseIndex, lineSpecificSlide); pres.Slides.InsertClone(baseIndex + 1, linePieChartSlide); } lineIncreaseIndex += 2 * curSlideLineCount + 2; } } string areaOutlineSpefic = string.Format("{0}. {1}", 1, areaKeys[0]); ReplaceTagForSlide(slide, Constant.bodyTextForAreaTemplatePrefix, ""); ReplaceTagForSlide(slide, Constant.aoTemplatePrefix, areaOutlineSpefic); }