Beispiel #1
0
        public static void Process(WordprocessingDocument docx,
                                   DataColumnInfo dcInfo,
                                   ReportDetailTemplate detail,
                                   SimpleField field)
        {
            var p        = GetFirstParent <Paragraph>(field);
            var drawing  = p?.Descendants <Drawing>().FirstOrDefault();
            var chartRef = drawing?.Descendants <ChartReference>().FirstOrDefault();

            if (chartRef == null)
            {
                return;
            }

            var firstOrDefault = docx.MainDocumentPart
                                 .Parts
                                 .FirstOrDefault(c => c.RelationshipId == chartRef.Id);

            if (firstOrDefault == null)
            {
                return;
            }
            var chartPart = (ChartPart)firstOrDefault
                            .OpenXmlPart;
            var data = GetChartData(detail);

            ChartUpdater.UpdateChart(chartPart, data);
        }
Beispiel #2
0
        public static void Process(WordprocessingDocument docx,
                                   DataColumnInfo dcInfo,
                                   ReportDetailTemplate detail,
                                   string contentControlTag)
        {
            var data = GetChartData(detail);

            ChartUpdater.UpdateChart(docx, contentControlTag, data);
        }
Beispiel #3
0
        private static ChartData GetChartData(ReportDetailTemplate detail)
        {
            var data = new ChartData
            {
                SeriesNames      = detail.SeriesFields.ToArray(),
                CategoryDataType = (ChartDataType)detail.DetailType
            };

            if (detail.DetailType == DetailType.DateTime)
            {
                data.CategoryFormatCode = 14;
            }
            var vw          = new DataView(detail.Data);
            var rws         = vw.ToTable(true, detail.CategoriesFieldName);
            var chartValues = new double[detail.SeriesFields.Count][];

            for (var c = 0; c < detail.SeriesFields.Count; c++)
            {
                chartValues[c] = new double[rws.Rows.Count];
            }
            var categoryNames = new List <string>();

            var i = 0;

            foreach (DataRow rw in rws.Rows)
            {
                var catValue = rw[0].ToString();
                categoryNames.Add(detail.DetailType == DetailType.DateTime
                    ? ToExcelInteger((DateTime)rw[0])
                    : rw[0].ToString());
                string appostroph = (detail.DetailType == DetailType.Number ? "" : "'");
                string filter     = detail.CategoriesFieldName + "=" + appostroph + catValue + appostroph + "";

                var j = 0;
                foreach (var dr in detail.Data.Select(filter))
                {
                    foreach (var d in detail.SeriesFields.Select(field => double.Parse(dr[field].ToString())))
                    {
                        chartValues[j][i] = d;
                        j++;
                    }
                    break;
                }
                i++;
            }
            data.CategoryNames = categoryNames.ToArray();
            data.Values        = chartValues;
            return(data);
        }