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