C# Excel写入数据及图表
开发工具:VS2017
语言:C
DotNet版本:.Net FrameWork 4.0及以上
使用的DLL工具名称:GemBox.Spreadsheet.dll (版本:37.3.30.1185)
一、GemBox.Spreadsheet工具:
该DLL是由GemBox公司开发的基于Excel功能的开发工具,该DLL很轻量,且使用起来很方便,在这里推荐下来来使用。
下载地址:
https://pan.baidu.com/s/1slcBUqh
本文就是使用该工具进行Excel的写入操作。
二、创建Excel
为了能使用该DLL,必须在调用前写入以下代码:
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
创建Excel文件如下:
ExcelFile excel = new ExcelFile();
这里仅仅只是创建一个excel,代表的是excel整个文件,而保存该文件的代码如下:
excel.Save("文件路径");
三、给Excel添加一些属性
我们可以给excel添加一些诸如文档标题、作者、公司及备注等内容,实现这些内容的代码如下:
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Title, TITLE));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Author, "CNXY"));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Company, "CNXY"));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Comments, "By CNXY.Website: http://www.cnc6.cn"));
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
四、给excel默认字体
这是给整个Excel设置统一的字体,具体代码如下:
excel.DefaultFontName = "Times New Roman";
五、添加一个Sheet表格
要知道,Excel是由Sheet表格构成的,因此添加Sheet表格的代码如下:
ExcelWorksheet sheet = excel.Worksheets.Add("表格名称");
以上,已经在excel上添加了一个名为“表格名称”的数据表格。
六、给Sheet添加密码保护
有时候,为了保护自己的Excel不被篡改,需要设置一下Sheet的密码,具体代码如下:
sheet.ProtectionSettings.SetPassword("cnxy");
sheet.Protected = true;
七、让网格线不可见
默认情况下,Sheet的网格线是可见的,有时候,我们可以设置网格线不可见,具体代码如下:
sheet.ViewOptions.ShowGridLines = false;
八、写入单元格
访问单元格的方式有三种,三种分别如下:
sheet.Cells["A1"]
sheet.Cells[0,0]
sheet.Rows[0].Cells[0]
以上三种方法都可以访问单元格,但如下写入单元格呢,其实方法很简单,如下:
sheet.Cells["A1"].Value= 内容
以上没有加双引号的原因是:内容不一定是字符串,有可能是数字、日期等。
九、单元格样式设置
单元格设置需要使用CellStyle对象,其代码如下:
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
CellStyle style = new CellStyle();//设置水平对齐模式style.HorizontalAlignment = HorizontalAlignmentStyle.Center;//设置垂直对齐模式style.VerticalAlignment = VerticalAlignmentStyle.Center;//设置字体style.Font.Size = 22 * PT; //PT=20style.Font.Weight = ExcelFont.BoldWeight;
style.Font.Color = Color.Blue;
sheet.Cells["A1"].Style = style;
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
填充方式如下:
sheet.Cells[24,1].Style.FillPattern.PatternStyle = FillPatternStyle.Solid;
sheet.Rows[24].Cells[1].Style.FillPattern.PatternForegroundColor = Color.Gainsboro;
设置边框如下:
style.Borders.SetBorders(MultipleBorders.Outside, Color.Black, LineStyle.Thin);
十、合并单元格
合并单元格需使用CellRange对象,我们可以从sheet.Cells.GetSubrange或GetSubrangeAbsolute获得,代码如下:
CellRange range = sheet.Cells.GetSubrange("B2", "J3");
range.Value = "Chart";
range.Merged = true;
sheet.Cells.GetSubrangeAbsolute(24, 1, 24, 9).Merged = true;
十一、创建Chart图表对象
使用的是LineChart对象,代码如下:
LineChart chart =(LineChart)sheet.Charts.Add(ChartType.Line,"B4","J22");
以上意思是从B4到J22创建一个LineChart对象。
设置图表标题不可见,代码如下:
chart.Title.IsVisible = false;
设置X轴与Y轴的标题可见,代码如下:
chart.Axes.Horizontal.Title.Text = "Time";
chart.Axes.Vertical.Title.Text = "Voltage";
十二、给Y轴设置属性
主要使用了chart.Axes.VerticalValue返回的ValueAxis对象,代码如下:
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
ValueAxis axisY = chart.Axes.VerticalValue;//Y轴最大刻度与最小刻度axisY.Minimum = -100;
axisY.Maximum = 100;//Y轴主要与次要单位大小axisY.MajorUnit = 20;
axisY.MinorUnit = 10;//Y轴主要与次要网格是否可见axisY.MajorGridlines.IsVisible = true;
axisY.MinorGridlines.IsVisible = true;//Y轴刻度线类型axisY.MajorTickMarkType = TickMarkType.Cross;
axisY.MinorTickMarkType = TickMarkType.Inside;
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
十三、附上完整的源代码
aaarticlea/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==" alt="" data-src="http://mmbiz.qpic.cn/mmbiz_png/oDaAmt9QDicTQSc8WiaDNHkcggJVuejc90pjiciaPVl8U8KXmicQv570q6rfElxDyMVbmxfsice1rYcib5gMgZDkBnclA/0?wx_fmt=gif" data-ratio="1" data-w="20" data-type="gif" />
using GemBox.Spreadsheet;using GemBox.Spreadsheet.Charts;using System;using System.Collections.Generic;using System.Diagnostics;using System.Drawing;namespace SpreadSheetChartDemo
{ class Program
{ const int PT = 20; const int LENGTH = 200; const string TIMESNEWROMAN = "Times New Roman"; const string TITLE = "Spread Sheet Chart Demo"; static void Main(string[] args)
{
SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
ExcelFile excel = new ExcelFile(); //Excel默认字体
excel.DefaultFontName = TIMESNEWROMAN; //Excel文档属性设置
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Title, TITLE));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Author, "CNXY"));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Company, "CNXY"));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Comments, "By CNXY.Website: http://www.cnc6.cn")); //新建一个Sheet表格
ExcelWorksheet sheet = excel.Worksheets.Add(TITLE); //设置表格保护
sheet.ProtectionSettings.SetPassword("cnxy");
sheet.Protected = true; //设置网格线不可见
sheet.ViewOptions.ShowGridLines = false; //定义一个B2-G3的单元格范围
CellRange range = sheet.Cells.GetSubrange("B2", "J3");
range.Value = "Chart";
range.Merged = true; //定义一个单元格样式
CellStyle style = new CellStyle(); //设置边框 style.Borders.SetBorders(MultipleBorders.Outside, Color.Black, LineStyle.Thin); //设置水平对齐模式
style.HorizontalAlignment = HorizontalAlignmentStyle.Center; //设置垂直对齐模式
style.VerticalAlignment = VerticalAlignmentStyle.Center; //设置字体
style.Font.Size = 22 * PT;
style.Font.Weight = ExcelFont.BoldWeight;
style.Font.Color = Color.Blue;
range.Style = style; //增加Chart
LineChart chart = (LineChart)sheet.Charts.Add(ChartType.Line,"B4","J22");
chart.Title.IsVisible = false;
chart.Axes.Horizontal.Title.Text = "Time";
chart.Axes.Vertical.Title.Text = "Voltage";
ValueAxis axisY = chart.Axes.VerticalValue; //Y轴最大刻度与最小刻度
axisY.Minimum = -100;
axisY.Maximum = 100; //Y轴主要与次要单位大小
axisY.MajorUnit = 20;
axisY.MinorUnit = 10; //Y轴主要与次要网格是否可见
axisY.MajorGridlines.IsVisible = true;
axisY.MinorGridlines.IsVisible = true; //Y轴刻度线类型
axisY.MajorTickMarkType = TickMarkType.Cross;
axisY.MinorTickMarkType = TickMarkType.Inside;
Random random = new Random(); double[] data = new double[LENGTH]; for (int i=0;i< LENGTH; i++)
{ if( random.Next(0,100) > 50)
data[i] = random.NextDouble() * 100; else
data[i] = -random.NextDouble() * 100;
}
chart.Series.Add("Random", data); //尾部信息
range = sheet.Cells.GetSubrange("B23", "J24");
range.Value = $"Write Time:{DateTime.Now:yyyy-MM-dd HH:mm:ss} By CNXY";
range.Merged = true; //B25(三种单元格模式)
sheet.Cells["B25"].Value = "http://www.cnc6.cn";
sheet.Cells[24,1].Style.FillPattern.PatternStyle = FillPatternStyle.Solid;
sheet.Rows[24].Cells[1].Style.FillPattern.PatternForegroundColor = Color.Gainsboro; //B25,J25
sheet.Cells.GetSubrangeAbsolute(24, 1, 24, 9).Merged = true; string filePath = $@"{Environment.CurrentDirectory}\SheetChart.xlsx"; try
{
excel.Save(filePath);
Process.Start(filePath);
Console.WriteLine("Write successfully");
} catch(Exception ex)
{
Console.WriteLine(ex);
}
Console.Write("Press any key to continue.");
Console.ReadKey();
}
}
}
十四、生成的Excel
演示的Excel下载地址:
https://pan.baidu.com/s/1slDPAED


十五、生成的exe
下载地址如下:
https://pan.baidu.com/s/1nvefYvJ
运行结果如下:

C# Excel写入数据及图表的更多相关文章
- [C#]使用Gembox.SpreadSheet向Excel写入数据及图表
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...
- jxl操作excel写入数据不覆盖原有数据示例
public void readTO() { Workbook wb = null; WritableWorkbook wwb = null; try { ...
- Python学习笔记_Python向Excel写入数据
实验环境 1.OS:Win 10 64位 2.Python 3.7 3.如果没有安装xlwt库,则安装:pip install xlwt 下面是从网上找到的一段代码,网上这段代码,看首行注释行,是在L ...
- python3.4对已经存在的excel写入数据
#!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...
- Excel数据可视化图表设计需要注意的几个问题
大数据发展迅速的时代,数据分析驱动商业决策.对于庞大.无序.复杂的数据要是没经过合适的处理,价值就无法体现. 可以想象一本没有图片的教科书.没有图表.图形或是带有箭头和标签的插图或流程图,那么这门学 ...
- java poi 从服务器下载模板写入数据再导出
最近写了一个,Excel 的 写入和导出. 需求是这样的. 在新建合同的时候,会有导出合同的数据, 导出的模板是固定的,,需要在模板里面写入合同的信息. first : 下载模板 ...
- java向Excel文件写入数据
/*使用之前要记得导入第三的jar包这个是我之前使用的时候那别人的东西自己修改了一下 还没来得及好好地封装一下还望见谅,注释我感觉写的挺清楚的就在不进行解释代码了*/package com.zzp.E ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据
背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...
随机推荐
- HTTP Error 500.19 - Internal Server Error
1.使用svn对项目进行管理 2.之前都是平安无事,忽然有一天报错:HTTP Error 500.19 - Internal Server Error,如图: 3.经过各种挣扎和求证,最后发现是项目. ...
- Bluetooth Obex
OPP 1.2 which uses OBEX over L2CAP. OPP 1.1 connection and transfer happens over RFCOMM->L2CAP.
- octave中的一些基本操作
1.矩阵的表示:v = [1 2 2] %表示1行3列的矩阵 v = [1; 2; 2] %表示3行1列的矩阵 v = [1 2; 2 3; 4 5] %3*2矩阵 size(v) % 求v的行与列 ...
- SSM框架中的注解,配置和控制器相关笔记
常规SSM实例 探索SSM理论的前提,应该是在对框架基础的运作方式有一定了解,以下是个人Android后台项目,用SSM框架快速搭建,以下是代码,主要 观察结构. 代码结构: model实体类 Ida ...
- Java 链表常见考题总结
首先定义自定义结点类,存储节点信息: public class Node { Node next=null; int data; public Node(int data){ this.data=da ...
- POJ 3468 A Simple Problem with Integers(树状数组区间更新) 续
这个题刚开始的时候是套模板的,并没有真的理解什么树状数组的区间更新,这几天想了一下,下面是总结: 区间更新这里引进了一个数组delta数组,delta[i]表示区间 [i, n] 的共同增量,每次你需 ...
- IdentityServer4 禁用 Consent screen page(权限确认页面)
IdentityServer4 在登录完成的适合,会再跳转一次页面(权限确认),如下: 我之前以为 IdentityServer4 就是这样使用的,但实际业务场景并不需要进行权限确认,而是登陆成功后直 ...
- ⒃bootstrap组件 轮播图 基础案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- lvs学习笔记
本人身为一个网工,最近一直在工作中学习linux的相关知识.前短时间通过自查资料学习了lvs的相关内容,摘录部分整理后和大家分享,内容较多,较琐碎,望见谅!!! LVS 从Linux内核版本2.6起, ...
- linux 安装 Elasticsearch5.6.x 详细步骤以及问题解决方案
在网上有很多那种ES步骤和问题的解决 方案的,不过没有一个详细的整合,和问题的梳理:我就想着闲暇之余,来记录一下自己安装的过程以及碰到的问题和心得:有什么不对的和问题希望及时拍砖. 第一步:环境 li ...