欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用Gembox.SpreadSheet向Excel写入数据及图表的实例

程序员文章站 2023-12-19 11:31:46
开发工具:vs2017 语言:c# dotnet版本:.net framework 4.0及以上 使用的dll工具名称:gembox.spreadsheet.dll...

开发工具:vs2017

语言:c#

dotnet版本:.net framework 4.0及以上

使用的dll工具名称:gembox.spreadsheet.dll (版本:37.3.30.1185)

一、gembox.spreadsheet工具:

该dll是由gembox公司开发的基于excel功能的开发工具,该dll很轻量,且使用起来很方便,在这里推荐下来来使用。

下载地址:

http://xiazai.jb51.net/201712/yuanma/gembox_spreadsheet.zip

本文就是使用该工具进行excel的写入操作。

二、创建excel

为了能使用该dll,必须在调用前写入以下代码:

spreadsheetinfo.setlicense("free-limited-key");

创建excel文件如下:

excelfile excel = new excelfile();

这里仅仅只是创建一个excel,代表的是excel整个文件,而保存该文件的代码如下:

excel.save("文件路径");

三、给excel添加一些属性

我们可以给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"));

四、给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对象,其代码如下:

cellstyle style = new cellstyle();
//设置水平对齐模式
style.horizontalalignment = horizontalalignmentstyle.center;
//设置垂直对齐模式
style.verticalalignment = verticalalignmentstyle.center;
//设置字体
style.font.size = 22 * pt; //pt=20
style.font.weight = excelfont.boldweight;
style.font.color = color.blue;
sheet.cells["a1"].style = style;

填充方式如下:

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对象,代码如下:

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;

十三、附上完整的源代码

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下载地址:

http://xiazai.jb51.net/201712/yuanma/sheetchart.zip

C#使用Gembox.SpreadSheet向Excel写入数据及图表的实例

C#使用Gembox.SpreadSheet向Excel写入数据及图表的实例

十五、生成的exe

下载地址如下:

http://xiazai.jb51.net/201712/yuanma/spreadsheetchartdemo.zip

运行结果如下:

C#使用Gembox.SpreadSheet向Excel写入数据及图表的实例

以上这篇c#使用gembox.spreadsheet向excel写入数据及图表的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

上一篇:

下一篇: