我这里插入的图表是: 《含有资料标记的折线图》
创建一个图表
workbook.Worksheets[0].Charts.Add(ChartType.图表类型,行,列,高,宽)
ChartType枚举里面就是图表类型,这个枚举的命名比较规范,可以根据名字去找到你想要的图表(不会英语的用翻译网站翻译一下就知道啦;比如我,哈哈)
话不多说,直接上代码
每一行代码都有注释,如果看不懂,评论区留下问题。
public IActionResult PrintExcel()
{
//创建Excel对象
Workbook workbook = new Workbook();
Workbook mBook = workbook;
//读取第一个sheet对象
Worksheet sheet = mBook.Worksheets[0];
//第一个sheet的单元格对象
Cells mcells = sheet.Cells;
//这里顺便记录一下,设置单元格样式的属性
Style Titlestyle = mBook.CreateStyle();
//----------------------背景颜色--------------------
//一定是两行代码都在,才会有效果
Titlestyle.ForegroundColor = Color.FromArgb(192, 192, 192);
Titlestyle.Pattern = BackgroundType.Solid;
//----------------------背景颜色--------------------
Titlestyle.IsTextWrapped = true;//自動換行
Titlestyle.HorizontalAlignment = TextAlignmentType.Center;//水平居中
Titlestyle.VerticalAlignment = TextAlignmentType.Center;//垂直居中
Titlestyle.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //左边框
Titlestyle.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //右边框
Titlestyle.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //上边框
Titlestyle.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //下边框
//给单元格赋值
List<string> Name = new List<string> {"小白","大白" };
List<double> XiaoBai = new List<double> {-0.2,-0.2 ,-0.2,-0.1,0.5};
List<double> DaBai = new List<double> { -0.3, -0.1, -0.2, 0.1, -0.1 };
for (int i = 0; i < Name.Count; i++)
{
//标题
cells[i+2, 0].PutValue(Name[i].ToString());
//小白对应的值
if (Name[i].ToString() == "小白")
{
for (int j = 0; j < XiaoBai.Count; j++)
{
cells[i+2, j].PutValue(XiaoBai[j]);
}
}
//大白对应的值
else {
for (int g = 0; i < DaBai.Count; g++)
{
cells[i+2, g].PutValue(XiaoBai[g]);
}
}
}
//-------------------------------插入图表-------------------------------
//创建一个折线图,后面參數一共有5个参数,咱们一个一个说
//workbook.Worksheets[0].Charts.Add(type,upperLeftRow,upperLeftColumn,lowerRightRow,lowerRightColumn)
//1、ChartType type 图表类型 ,CharType枚举类型有Excel中所有的图表
//2、int upperLeftRow 把这个图表放在第几行
//3、int upperLeftColumn 把这个图表放在第几列
//4、int lowerRightRow 高度=(upperLeftRow+你设定的高度)
//5、int lowerRightColumn 宽度=(upperLeftColumn+你设定的宽度)
//(宽度和高度的单位是单元格,1就是一个单元格,2就是两个单元格)
//我这里是6*7的规格,图表是 :《含有资料标记的折线图》
workbook.Worksheets[0].Charts.Add(ChartType.LineWithDataMarkers, 4, 2,4+6,2+7);
//刚刚创建的图表的对象,只能通过索引去访问,如果有多个图表,注意索引值
Chart chart = workbook.Worksheets[0].Charts[0];
//X轴
chart.CategoryAxis.TickLabelPosition = TickLabelPositionType.Low;//显示位置调为低
//Y轴
chart.SecondValueAxis.IsVisible = false;
chart.ValueAxis.MajorUnit = 0.2;//设置y轴的显示值间隔
chart.ValueAxis.MaxValue = 0.5;//设置y轴开始最大值
chart.ValueAxis.MinValue = -0.5;//设置y轴的最小值
//折线名称(不知道这是啥的,看下面的效果图)
chart.Legend.Position = LegendPositionType.Left;
chart.Legend.TextFont.Color = Color.Gray;
chart.Legend.Border.Color = Color.Gray;
//数据区间
//需要注意的是:只要数据的单元格区间,不要把折线名称的单元格区间加进去了
//没搞清楚的,可以看看效果图
//如果数据在Sheet2中,区间就这么写"Sheet2!B3:F4"
chart.NSeries.Add("B3:F4", false);
//设置折线名称的数据(不知道这是啥的,看下面的效果图)
for (int i = 0; i < Name.Count; i++)
{
chart.NSeries[i].Name = cells[i, 0].Value;//设置名称
chart.NSeries[i].DataLabels.IsValueShown = false;//属于它的线是否需要显示值
chart.NSeries[i].DataLabels.TextFont.Color = Color.Gray;//字体颜色
}
//把Excel对象转换为字节
byte[] rv = new byte[] { };
using (MemoryStream ms = mBook.SaveToStream())
{
rv = ms.ToArray();
}
//文件类型
string ContentType = "application/vnd.ms-excel";
//文件名称
var ExportName = "Excel名字.xls";
//根据Excel字节,生成 FileContentResult对象
FileContentResult Result = new FileContentResult(rv, ContentType);
//指定文件名称
Result.FileDownloadName = ExportName;
return Result;
}