0

実行時にグラフのデータを決定し、.doc に入れる必要があります。ドキュメントを作成するには、Aspose を使用して .doc テンプレートの要素を置き換えます。グラフの例は、Excel ワークブックを Word にインポートすることによって作成されました。ほとんどの場合、既定値が使用されますが、そのようなグラフを作成することはできません。

グラフはどのように見えるべきかこれまでに得たもの

右側はコードで作成しようとしているチャートの例、左側はこれまでに取得したものです。

  1. 各データポイントをマークするドットはありません
  2. 目盛りラベルは、目盛りの間ではなく目盛りに配置されます (軸の位置で行われます)。コードでこれを行う方法がわかりません。
  3. グラフの高さが圧縮されているのは、.net チャートで作成された画像が正方形であり、画像の例の境界内に詰め込む必要があるためです (幅/高さの比率を変更する方法は?)
  4. 大きな数字は . でフォーマットされません。3 つの数字の各グループ間。

.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. まだ問題があります。目盛りラベルの値が解釈されます。Word で Excel ワークブックを使用するときのデフォルトのように、x 軸の値と正確に一致させる必要があります。

  3. グラフのサイズを指定します。

        chart.Width = 280;
        chart.Height = 180;
    
  4. フォーマットを指定します。

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

他に 2 つの問題が見つかりました。解決できない場合は別の質問をします。

  1. 線画にはアンチエイリアスがかかりません。(チャートのアンチエイリアシング設定がすべてであっても)。
  2. 凡例はチャート描画領域内にあり、実際のグラフの表示を妨げる​​場合があります。
于 2013-09-18T11:18:25.827 に答える