开发工具: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写入数据及图表的更多相关文章

  1. [C#]使用Gembox.SpreadSheet向Excel写入数据及图表

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...

  2. jxl操作excel写入数据不覆盖原有数据示例

    public void readTO() {        Workbook wb = null;        WritableWorkbook wwb = null;        try {   ...

  3. Python学习笔记_Python向Excel写入数据

    实验环境 1.OS:Win 10 64位 2.Python 3.7 3.如果没有安装xlwt库,则安装:pip install xlwt 下面是从网上找到的一段代码,网上这段代码,看首行注释行,是在L ...

  4. python3.4对已经存在的excel写入数据

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  5. Excel数据可视化图表设计需要注意的几个问题

    ​大数据发展迅速的时代,数据分析驱动商业决策.对于庞大.无序.复杂的数据要是没经过合适的处理,价值就无法体现. 可以想象一本没有图片的教科书.没有图表.图形或是带有箭头和标签的插图或流程图,那么这门学 ...

  6. java poi 从服务器下载模板写入数据再导出

    最近写了一个,Excel 的 写入和导出.   需求是这样的.   在新建合同的时候,会有导出合同的数据,    导出的模板是固定的,,需要在模板里面写入合同的信息. first   :  下载模板 ...

  7. java向Excel文件写入数据

    /*使用之前要记得导入第三的jar包这个是我之前使用的时候那别人的东西自己修改了一下 还没来得及好好地封装一下还望见谅,注释我感觉写的挺清楚的就在不进行解释代码了*/package com.zzp.E ...

  8. NPOI操作excel之写入数据到excel表

    在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...

  9. Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据

    背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...

随机推荐

  1. Vue源码后记-其余内置指令(1)

    把其余的内置指令也搞完吧,来一个全家桶. 案例如下: <body> <div id='app'> <div v-if="vIfIter" v-bind ...

  2. MySQL冗余和重复索引

    MySQL允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能. 重复索引是指的在相同的列上按照相同的顺序创建 ...

  3. Java语言实现机制

    Java语言实现机制 1.Java虚拟机(Java Virtual Machine) Java虚拟机(JVM)是在一台计算机上由软件模拟也可以用硬件来实现的假想的计算机.它定义了指令集(相当于中央处理 ...

  4. C++ 随机生成一个(0,1)之间的小数

    double p; ]; memset(s,,sizeof(s)); s[]='; s[]='.'; ;i<;i++) { s[i]=rand()%+'; } p=atof(s); cout & ...

  5. Winsock网络编程笔记(3)----基于UDP的server和client

    在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此 ...

  6. YARN作业运行机制

    在传统的MapReduce中, Jobtracker同时负责作业调度(将任务调度给对应的tasktracker)和任务进度管理(监控任务, 重启失败的或者速度比较慢的任务等). YARN中将Jobtr ...

  7. Flex布局语法

    flexbox 弹性盒布局和布局原理 新版的flexbox规范分两部分:一部分是container,一部分是 items. flexbox是一整套布局规范,包含了多个css属性,所以学习起来比`flo ...

  8. Intellij导入子项目时,maven列表子项目灰色不可用---解决方法

    导入子项目的module时,左侧project目录中有一个module图标右下角没有小蓝点,maven管理列表该module为灰色(表明未被管理),尝试几次后终于找到解决方案. 贴一张调好过后的图 第 ...

  9. Dev控件 galleryControl

    发现一个规律,不会的控件先拖到界面上,右上角需要add 的就对应add一个.然后就是找属性和集合手动添加几个. 然后把XXXForm.Designer.cs 里面的代码提取到逻辑代码中,就把常量换成变 ...

  10. Oracle 存储过程的导出导入序列的导出

    昨天发布网站,需要将oracle的存储过程导出来,再在新的电脑加上去.登陆—>工具—>导出用户对象—>选取需要导出的存储过程—>导出 保存格式为.sql.当然利用该种方法也可以 ...