柱形图,折线图等是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("生成成功");
}
}