protected void CreateFile(ElectionYear electionYear, string path, int fileLength) { var dir = Path.GetDirectoryName(this.GetType().Assembly.Location); var dest = Path.Combine(dir + @"\..\" + Data.Core.Consts.TopPath, "BarChartTest"); Directory.CreateDirectory(dest); var dirInfo = new DirectoryInfo(dest); string fileName = Path.Combine(Path.Combine(dir, electionYear.FullPath), string.Format(path, electionYear.Year)); var fileNameSource = _barChartPreparer.CreateDiagram(new FileInfo(fileName), electionYear.CaptionDiagram, true); var fileInfo = new FileInfo(fileNameSource); var destFileName = Path.Combine(Path.GetFullPath(dirInfo.FullName), Path.GetFileName(fileNameSource)); sb.AppendLine($"<img src=\"{Path.GetFileName(fileNameSource)}\"/>"); if (File.Exists(destFileName)) { File.Delete(destFileName); } fileInfo.CopyTo(destFileName); Assert.AreEqual(fileLength, new FileInfo(fileNameSource).Length); }
public override string ToString() { var sb = new StringBuilder(); sb.Append("ElectionYear = "); sb.AppendLine(ElectionYear.ToString()); sb.Append("Party = "); sb.AppendLine(Party.ToString()); sb.Append("OfficeType = "); sb.AppendLine(OfficeType.ToString()); sb.Append("OfficeId = "); sb.AppendLine(OfficeId.ToString()); sb.Append("Flow"); sb.AppendLine(Flow.ToString()); sb.AppendLine("--"); return(sb.ToString()); }
public static string GenerateGraphic( ElectionYear electionYear, string[] foos, AxisYType axisYType, DiagramType diagramType ) { var fooDatas = electionYear.FooData.Where(f => !f.IsHiddenForIks).ToArray(); var path = Consts.LocalPath; Func <string, List <Election>, AxisYType, SortedDictionary <int, int> > getResults; if (diagramType == DiagramType.Results) { getResults = GetNumbersToResult; } else { getResults = GetNumbersToPresence; } var firstPart = diagramType == DiagramType.Results ? "Results" : "Presence"; var secondPart = axisYType == AxisYType.People ? "ByPeople" : "ByUIKs"; string picName = firstPart + secondPart; Directory.CreateDirectory(Consts.GraphicsPath); var name = Path.Combine(Consts.GraphicsPath, picName + electionYear.Year); var pictureName = name + ".jpg"; var xls = name + ".xls"; var fi = new FileInfo(pictureName); var fiXls = new FileInfo(xls); if (File.Exists(pictureName)) { return(fi.Name); } var what = electionYear.DirElectionInfo; var fileName = path + @"\" + Consts.ElectionsDir + @"\" + what + @"\" + what + electionYear.Year + ".xml"; var elections = ProcessData.ReadSavedData(fileName); object misValue = System.Reflection.Missing.Value; const int Width = 400; // 467; const int Height = 230; // 200; var app = new ApplicationClass(); var workBook = app.Workbooks.Add(misValue); var workSheet = (Worksheet)workBook.Worksheets[1]; var chartObjects = (ChartObjects)workSheet.ChartObjects(Type.Missing); var chartObject = chartObjects.Add(10, 80, (diagramType == DiagramType.Results) ? Width : 300, Height); var chart = chartObject.Chart; chart.ChartType = XlChartType.xlXYScatterLinesNoMarkers; var seriesCollection = (SeriesCollection)chart.SeriesCollection(misValue); if (diagramType == DiagramType.Presence) { int c = 0; var percentsCounter = getResults(null, elections, axisYType); foreach (var kvp in percentsCounter) { c++; workSheet.Cells[c, 1] = kvp.Value; workSheet.Cells[c, 2] = kvp.Key; } var series = seriesCollection.NewSeries(); series.Values = workSheet.Range["a1", "a" + c.ToString()]; series.XValues = workSheet.Range["b1", "b" + c.ToString()]; chart.Legend.Delete(); } else { var values = new Triple <SortedDictionary <int, int>, string, int> [foos.Length]; for (int i = 0; i < values.Length; i++) { var value = getResults(foos[i], elections, axisYType); values[i] = new Triple <SortedDictionary <int, int>, string, int>(value, foos[i], value.Count); } for (int i = 0; i < values.Length; i++) { int c = 0; foreach (var kvp in values[i].First) { c++; workSheet.Cells[c, 2 * i + 1] = kvp.Value; workSheet.Cells[c, 2 * i + 2] = kvp.Key; } var series = seriesCollection.NewSeries(); var first = (char)('a' + 2 * i); var second = (char)('a' + 2 * i + 1); var foo = fooDatas.First(f => string.Compare(f.EnglishShort, foos[i], StringComparison.CurrentCultureIgnoreCase) == 0); series.Name = string.Format("{0},\n{1}%", foo.RussianLong, foo.Result); series.Values = workSheet.Range[first.ToString() + "1", first.ToString() + c.ToString()]; series.XValues = workSheet.Range[second + "1", second.ToString() + c.ToString()]; } } Axis xAxis = (Axis)chart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary); xAxis.HasTitle = true; xAxis.AxisTitle.Text = diagramType == DiagramType.Results ? "Результат, %" : "Явка, %"; xAxis.MinimumScale = 0; xAxis.MajorUnit = 10; xAxis.MinorUnit = 1; xAxis.MinorTickMark = XlTickMark.xlTickMarkInside; xAxis.HasMajorGridlines = true; //xAxis.HasMinorGridlines = true; xAxis.MaximumScale = 100; Axis yAxis = (Axis)chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary); yAxis.HasTitle = true; yAxis.AxisTitle.Text = (axisYType == AxisYType.UIK) ? "Количество участков" : "Количество людей на участках"; yAxis.MaximumScale = diagramType == DiagramType.Results ? axisYType == AxisYType.People ? 14000000 : 10000 : axisYType == AxisYType.People ? 6000000 : 6000; chart.HasTitle = true; var presence = diagramType == DiagramType.Results ? "" : string.Format(", {0}%", electionYear.Presence.ToString().Replace(",", ".")); chart.ChartTitle.Text = string.Format("{0} {1} {2}{3}", diagramType == DiagramType.Results ? "Результаты выборов" : "Явка на выборах", (electionYear.ElectionType == ElectionType.Duma) ? "в Думу" : "президента", electionYear.Year, presence); if (diagramType == DiagramType.Results) { chart.PlotArea.Width = 262; } Trace.WriteLine(chart.PlotArea.Width); File.Delete(pictureName); File.Delete(fiXls.FullName); //workBook.SaveAs(fiXls.FullName, XlFileFormat.xlWorkbookDefault, misValue, misValue, misValue, misValue, XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); chart.Export(fi.FullName, "JPG", misValue); workBook.Close(false, misValue, misValue); app.Quit(); Marshal.ReleaseComObject(workSheet); Marshal.ReleaseComObject(workBook); Marshal.ReleaseComObject(app); return(fi.Name); }