5

EPPlus を使用して、単純な折れ線グラフを Excel に自動的に追加しようとしています。使用したいデータを含むセルの範囲を知っています。グラフを次のようにしたい:

ここに画像の説明を入力

Before列と列はAfter、表示されているものよりもずっと続きます。

このコードを使用してグラフを作成し、配置していますが、グラフが使用するデータを設定する方法がわかりません:

ExcelChart ec = ws.Drawings.AddChart("Line Time Graph", OfficeOpenXml.Drawing.Chart.eChartType.Line);
ec.Title.Text = "Benchmarks";
ec.SetPosition(_times.Count + 2, 0, 1, 0);

何か関係があるのか​​もしれませんがec.Series.Add、適切に使用する方法がわかりません。あなたが私を正しい方向に向けることができれば、それは素晴らしいことです.

4

1 に答える 1

10

これがあなたに役立つことを願っています:

ExcelChart ec = ws.Drawings.AddChart("Line Time Graph", OfficeOpenXml.Drawing.Chart.eChartType.Line);
ec.Title.Text = "Benchmarks";
ec.SetPosition(_times.Count + 2, 0, 1, 0);
ec.SetSize(800, 600);

var ran1 = sheet.Cells["A3:A10"];
var ran2 = sheet.Cells["G3:G10"]; // label range if there is. Otherwise, let select blank range then edit XML data later to remove 'c:cat' tags (bellow example)

var serie1 = ec.Series.Add(ran1, ran2);
// use serie1 variable to format and so on
// set serie1.HeaderAddress to A2 also

var ran1 = sheet.Cells["B3:B10"];
var serie2 = ec.Series.Add(ran1, ran2);
// use serie2 variable to format and so on

私がテストした別の完全な例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OfficeOpenXml;
using System.IO;
using OfficeOpenXml.Drawing.Chart;

namespace TestExcelEPPluss
{
    class Program
    {
        static void Main(string[] args)
        {
            ExcelPackage package = new ExcelPackage();
            var sheet = package.Workbook.Worksheets.Add("TestingGraph");

            Random r = new Random();
            var cell = sheet.Cells["A1"];
            cell.Value = "Before";

            cell = sheet.Cells["B1"];
            cell.Value = "After";

            for (int i = 0; i < 100; i++)
            {
                cell = sheet.Cells[i + 2, 1];
                cell.Value = r.Next(300, 500);
                cell = sheet.Cells[i + 2, 2];
                cell.Value = r.Next(300, 500);
            }

            ExcelChart ec = (ExcelLineChart)sheet.Drawings.AddChart("chart_1", eChartType.Line);
            ec.SetPosition(1, 0, 3, 0);
            ec.SetSize(800, 300);
            //ec.Legend.Add();

            var ran1 = sheet.Cells["A2:A101"];
            var ran2 = sheet.Cells["0:0"];

            var serie1 = (ExcelLineChartSerie)ec.Series.Add(ran1, ran2);
            serie1.Header = sheet.Cells["A1"].Value.ToString();

            ran1 = sheet.Cells["B2:B101"];
            var serie2 = ec.Series.Add(ran1, ran2);
            serie2.Header = sheet.Cells["B1"].Value.ToString();

            var xml = ec.ChartXml;
            var lst = xml.GetElementsByTagName("c:lineChart");
            foreach (System.Xml.XmlNode item in lst[0].ChildNodes)
            {
                if (item.Name.Equals("ser"))
                {
                    foreach (System.Xml.XmlNode subitem in item.ChildNodes)
                    {
                        if (subitem.Name.Equals("c:cat"))
                        {
                            item.RemoveChild(subitem);
                            break;
                        }
                    }
                }
            }

            string path = @"C:\test1.xlsx";
            File.WriteAllBytes(path, package.GetAsByteArray());
            package.Dispose();

            Console.WriteLine("Done - Path: {0}", path);
            Console.ReadLine();
        }
    }
}

c:catserシリーズのカテゴリですc:cat。チャート xml からタグを削除すると、チャートは1,2,3,4,5,...カテゴリのデフォルトとして使用されます (ここでは x 軸)。

于 2012-11-12T07:07:25.783 に答える