.NETDocX操作Word文件生成图表

柱形图,折线图等是Word操作中常见的图表操作。那么这节讲的就是.NET操作数据生成这些图表

准备工作:引用Xceed.Words.NET.dll,下载链接:https://pan.baidu.com/s/19fPFX7iScHHMWx3mIJg5Gg 提取码:d73t 

1、项目中新建Chart文件夹存储本次例子的类文件和导出文件,

2、并创建ChartSample类作为操作类,

3、ChartData类存储生成柱状图的数据

ChartData源码如下,其实数据就是List集合,实际开发中,数据就是我们从数据库中取得的数据集

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WordOperate.Samples.Chart
{
    internal class ChartData
    {
        public string Category
        {
            get;
            set;
        }
        public double Expenses
        {
            get;
            set;
        }

        public static List<ChartData> CreateCanadaExpenses()
        {
            var canada = new List<ChartData>();
            canada.Add(new ChartData() { Category = "Food", Expenses = 100 });
            canada.Add(new ChartData() { Category = "Housing", Expenses = 120 });
            canada.Add(new ChartData() { Category = "Transportation", Expenses = 140 });
            canada.Add(new ChartData() { Category = "Health Care", Expenses = 150 });
            return canada;
        }

        public static List<ChartData> CreateUSAExpenses()
        {
            var usa = new List<ChartData>();
            usa.Add(new ChartData() { Category = "Food", Expenses = 200 });
            usa.Add(new ChartData() { Category = "Housing", Expenses = 150 });
            usa.Add(new ChartData() { Category = "Transportation", Expenses = 110 });
            usa.Add(new ChartData() { Category = "Health Care", Expenses = 100 });
            return usa;
        }

        public static List<ChartData> CreateBrazilExpenses()
        {
            var brazil = new List<ChartData>();
            brazil.Add(new ChartData() { Category = "Food", Expenses = 125 });
            brazil.Add(new ChartData() { Category = "Housing", Expenses = 80 });
            brazil.Add(new ChartData() { Category = "Transportation", Expenses = 110 });
            brazil.Add(new ChartData() { Category = "Health Care", Expenses = 60 });
            return brazil;
        }
    }
}

如果出现以下错误,是因为项目中缺少windowsbase.dll,可以到网上下载一个并添加引用

这是脚本之家的下载地址:https://www.jb51.net/dll/windowsbase.dll.html

到此为止,准备工作和数据,我们都有了。接下来就是如何把数据转换成柱状图并显示到Word文档上。

回到ChartSample类中

1、申明一个私有的变量存放,我们需要导出Word文档的目录

 private const string ChartSampleOutputDirectory = @"\WordOperate\WordOperate\Samples\Chart\Output\"; 

2、创建无参构造函数,判断输出目录是否存在,不存在则创建该目录

        static ChartSample()
        {
            if (!Directory.Exists(ChartSample.ChartSampleOutputDirectory))
            {
                Directory.CreateDirectory(ChartSample.ChartSampleOutputDirectory);
            }
        }

3、新建一个BarChart方法执行具体的操作,废话就不多说了,直接上码,每一步注释都有说明了。

        public static void BarChart()
        {

            // 创建一个Word文档,名字为:柱状图.doc
            using (DocX document = DocX.Create(ChartSample.ChartSampleOutputDirectory + @"柱状图.docx"))
            {
                // 添加标题
                document.InsertParagraph("横向柱状图").FontSize(15d).SpacingAfter(50d).Alignment = Alignment.center;

                // 创建一个名字为c的柱状图表
                var c = new BarChart();
                c.AddLegend(ChartLegendPosition.Left, false);
                c.BarDirection = BarDirection.Column;//指示柱状图是横向的还是纵向的:Column纵向,Bar横向
                c.BarGrouping = BarGrouping.Standard;//这个不好解释,一个4个枚举值,你一一试一遍就知道了
                c.GapWidth = 200;//柱状图表的宽度
                c.GapWidth = 200;

                // 获取数据
                var canada = ChartData.CreateCanadaExpenses();
                var usa = ChartData.CreateUSAExpenses();
                var brazil = ChartData.CreateBrazilExpenses();

                // 创建柱形并绑定数据
                var s1 = new Series("Brazil");//创建一个名为Brazil的柱状图形
                s1.Color = Color.GreenYellow;//指定柱状图颜色,如果不指定则会随机分配颜色
                s1.Bind(brazil, "Category", "Expenses");//绑定数据,参数1是面已经获取到的数据

                var s2 = new Series("USA");
                s2.Color = Color.LightBlue;
                s2.Bind(usa, "Category", "Expenses");
                c.AddSeries(s2);

                var s3 = new Series("Canada");
                s3.Color = Color.Gray;
                s3.Bind(canada, "Category", "Expenses");
                c.AddSeries(s3);
                c.AddSeries(s1);//把创建好的柱状图像添加到柱状图表中

                //为柱状图表添加一个标题
                document.InsertParagraph("这就是自己代码创建的柱状图").FontSize(15).SpacingAfter(10d);
                //把柱状图表插入到一开始就创建好的Word文档
                document.InsertChart(c);
                //保存Word文档
                document.Save();
                Console.WriteLine( "生成成功" );
            }
        }

到Main方法中执行以下看看效果

代码已经执行,出目录中也有了“柱状图.doc”这个文件

并且生成的柱状图和我们预期一致

二、折线图

生成折线图的操作和代码与柱状图基本一致,直接上代码

 public static void LineChart()
        {
            // 创建一个Word文档,名字为:折线图.doc
            using (DocX document = DocX.Create(ChartSample.ChartSampleOutputDirectory + @"折线图.docx"))
            {
                // 添加标题
                document.InsertParagraph("折线图").FontSize(15d).SpacingAfter(50d).Alignment = Alignment.center;

                // 创建一个折线图表
                var c = new LineChart();
                c.AddLegend(ChartLegendPosition.Left, false);//为柱状体添加图例,第一个参数表示将图例放在左边

                // 获取数据
                var canada = ChartData.CreateCanadaExpenses();
                var usa = ChartData.CreateUSAExpenses();
                var brazil = ChartData.CreateBrazilExpenses();

                // 创建折线并绑定数据
                var s1 = new Series("Brazil");//创建一条名为“Brazil”的折线
                s1.Bind(brazil, "Category", "Expenses");//绑定数据
                c.AddSeries(s1);//将该折线添加到折线图表c中

                var s2 = new Series("USA");
                s2.Bind(usa, "Category", "Expenses");
                c.AddSeries(s2);

                var s3 = new Series("Canada");
                s3.Bind(canada, "Category", "Expenses");
                c.AddSeries(s3);

                // 为折线图表添加一个标题
                document.InsertParagraph("这就是自己代码创建的折线图").FontSize(15).SpacingAfter(10d);
                //将折线图表插入Word文档中
                document.InsertChart(c);
                //保存Word文档
                document.Save();
                Console.WriteLine("生成成功");
            }
        } 

三、饼图

public static void PieChart()
        {
            // 创建一个Word文档,名字为:饼图.doc
            using (DocX document = DocX.Create(ChartSample.ChartSampleOutputDirectory + @"饼图.docx"))
            {
                // 添加标题
                document.InsertParagraph("Pie Chart").FontSize(15d).SpacingAfter(50d).Alignment = Alignment.center;

                // 创建一个饼图表
                var c = new PieChart();
                c.AddLegend(ChartLegendPosition.Left, false);

                // 获取数据
                var brazil = ChartData.CreateBrazilExpenses();

                // 创建饼图并绑定数据
                var s1 = new Series("Canada");
                s1.Bind(brazil, "Category", "Expenses");
                c.AddSeries(s1);

                // 为饼图表添加一个标题
                document.InsertParagraph("这就是自己代码创建的饼图").FontSize(15).SpacingAfter(10d);
                //将饼图图表插入Word文档中
                document.InsertChart(c);
                //保存Word文档
                document.Save();
                Console.WriteLine("生成成功");
            }
        } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章