0

我需要在运行时确定图表中的数据并将其放入 .doc 中。为了构建文档,我使用 Aspose 替换 .doc 模板中的元素。通过将 Excel 工作簿导入 Word 制作了一个示例图表,它们大多使用默认值,但我无法构建一个看起来像它的图表。

图表应该是什么样子到目前为止我得到了什么

右边是我试图用代码制作的示例图表,左边是我到目前为止得到的。

  1. 它没有标记每个数据点的点
  2. 刻度线标签位于刻度线而不是介于两者之间(使用轴位置完成)不知道如何在代码中执行此操作。
  3. 该图在高度上被压缩,因为 .net 图表制作的图片是方形的,需要塞在示例图片边界内(如何更改宽度/高度比?)
  4. 大数字不使用 . 在每组三个数字之间。

.docx 不是一个选项,文件格式必须是 .doc。

我用于构建图表的代码。使用数据调用此代码以填充图形。

    public MemoryStream MakeLineChart(string title, string[] captions, Color[] colors, decimal[][] values)
    {
        var chart = new Chart();

        var area = new ChartArea("MyChartArea");
        area.AxisY2.LineWidth = 0;
        area.AxisY.LineWidth = 0;
        area.AxisY.MajorGrid.Enabled = false;
        area.AxisY.MinorGrid.Enabled = false;
        area.AxisX.IsMarginVisible = true;

        foreach (var axis in area.Axes)
        {
            axis.LineColor = Color.LightGray;
            axis.MajorGrid.LineColor = Color.LightGray;
            axis.MajorTickMark.Enabled = false;
        }

        var legend = new Legend();
        legend.LegendStyle = LegendStyle.Row;
        legend.Docking = Docking.Bottom;
        legend.DockedToChartArea = area.Name;
        legend.Enabled = true;

        chart.Legends.Add(legend);
        chart.ChartAreas.Add(area);
        chart.BorderlineColor = Color.Black;
        chart.BorderlineWidth = 2;
        chart.Titles.Add(title);
        chart.TextAntiAliasingQuality = TextAntiAliasingQuality.High;
        chart.AntiAliasing = AntiAliasingStyles.All;

        for (int i = 1; i < values.Length; i++)
        {
            var line = new Series(captions[i - 1]);
            line.ChartArea = area.Name;
            line.ChartType = SeriesChartType.Spline;
            line.Color = colors[i - 1];
            line.BorderWidth = 5;

            for (int j = 0; j < values[i].Length; j++)
            {
                line.Points.AddXY(values[0][j], values[i][j]);
            }

            chart.Series.Add(line);
        }

        var image = new MemoryStream();

        chart.SaveImage(image, ChartImageFormat.Emf);

        return image;
    }
4

1 回答 1

0

我解决了其中几个问题:

  1. 在系列上指定标记

            line.MarkerStyle = MarkerStyle.Circle;
            line.MarkerSize = 7;
    
  2. 仍然是一个问题,刻度线标签值是重复的,我需要它们完全是 x 轴值,就像在 Word 中使用 Excel 工作簿时的默认值一样。

  3. 指定图表大小:

        chart.Width = 280;
        chart.Height = 180;
    
  4. 指定格式:

        area.AxisY.LabelStyle.Format = "€{#,##0 }";
    

我发现了两个额外的问题,如果我不能解决它们会问另一个问题。

  1. 抗锯齿不适用于线条图形。(即使图表抗锯齿设置为全部)。
  2. 图例位于图表绘制区域内,有时会挡住实际图表的视图。
于 2013-09-18T11:18:25.827 回答