C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)
前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我们项目中的一些实际问题,这两天继续研究了下这个组件,觉得有些功能用起来还是挺方便的,这篇继续来看看Spire.XLS的一些其他功能,说不定有你需要的呢~~
本文原创地址:http://www.cnblogs.com/landeanfen/p/5906077.html
一、基础入门
1、新建Workbook
Spire.XLS提供了多种方式创建Workbook对象
1.1、新建空的Workbook
//新建Workbook
Workbook workbook = new Workbook();
//得到第一个Sheet页
Worksheet sheet = workbook.Worksheets[]; //给A2这个单元格设置值
sheet.Range["A2"].Text = "你好,Jim" ; //保存到物理路径
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
workbook.SaveToFile(strFullName);
就这么简单生成一个Excel文件

1.2、根据物理路径生成Workbook
//新建Workbook
Workbook workbook = new Workbook();
//将当前路径下的文件内容读取到workbook对象里面
workbook.LoadFromFile(@"D:\Data\Upload\Export20160926114559.xlsx"); //得到第一个Sheet页
Worksheet sheet = workbook.Worksheets[];
//给A2这个单元格设置值
sheet.Range["C5"].Text = "你好,Jim" ; //保存到物理路径
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
workbook.SaveToFile(strFullName,ExcelVersion.Version2010);
1.3、根据文件流生成Workbook
上篇我们演示过多次,对于Web里面的文件上传,多用此方法。
//得到当前请求的文件
var oFile = Request.Files["txt_file"]; //根据当前的文件流生成Workbook对象
Workbook book = new Workbook();
book.LoadFromStream(oFile.InputStream);
1.4、根据Excel模板生成Workbook
这种用法适用于项目需要使用Excel模板的时候,比如我们项目需要导出的每一个Excel都适用如下模板:

那么,我们每次生成Excel的时候可以根据该模板去创建Workbook
//新建Workbook
Workbook workbook = new Workbook();
//根据模板生成Workbook
workbook.LoadTemplateFromFile(@"D:\Data\Upload\Template.xlsx");
这样得到的Excel文件将会自动套用该模板样式。
2、读写Workbook
2.1、根据单元格的名称框来读写Excel
关于Workbook的读写,上文已经提供了一种方式,形如:
sheet.Range["C5"].Text = "你好,Jim" ;
这样就能给C5单元格赋值,如果是取值,可以直接使用同样的方式。当然,除了Text字符串的内容,组件还提供了NumberValue、DateTimeValue、BooleanValue等属性,用于读写数字、时间、bool类型的值。
当然,Range除了支持基础的单元格名称框来读写值之外,它还提供了给某一个区域的文本框赋值的功能。比如
sheet.Range["C5:E6"].Value = "你好,Jim" ;
这一句表示给C5-E6这一区域的文本框统一赋值。得到结果如下:

如果需要操作当前区域的所有单元格,可以这样:
var columes = sheet.Range["C5:E6"].Columns ;
foreach (var column in columes)
{ }
2.2、根据单元格的行列索引来读写Excel
除了上面的方式,组件还支持通过行列的索引去给单元格取赋值。
sheet.Range[, 1].Text = "部门名称";
以上一句表示给第一个行第一列单元格赋值。
3、保存Workbook
关于Excel的保存,组件同样提供了多种方式。
3.1、直接保存的方式:SaveToFile()
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
workbook.SaveToFile(strFullName);
值得一提的是,SaveToFile还支持保存不同版本的Excel,来看这个重载
public void SaveToFile(string fileName, ExcelVersion version);
ExcelVersion是一个枚举类型,定义了各种不同版本的Excel:
public enum ExcelVersion
{
// 摘要:
// Represents excel version 2007 xlsb
Xlsb2007 = ,
//
// 摘要:
// Represents excel version 2010 xlsb
Xlsb2010 = ,
//
// 摘要:
// OpenOffice Spreadsheet documents
ODS = ,
//
// 摘要:
// Represents excel version 97-2003.
Version97to2003 = ,
//
// 摘要:
// Represents excel version 2007
Version2007 = ,
Version2010 = ,
//
// 摘要:
// Represents excel version 2013.
Version2013 = ,
}
3.2、保存并且转换文件
上篇介绍Excel转PDF的时候,我们知道组件提供了SaveToPdf()方法直接将Excel保存成为pdf文件,用法如下:
//保存到物理路径
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
workbook.SaveToPdf(strFullName)
除了保存成为pdf之外,还支持转换成其他格式:
保存为image
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
var image = workbook.SaveAsImage(, , );
image.Save(strFullName);
SaveAsImage()第一个参数表示需要生成图片的Sheet页的索引;第二、三个参数表示生成图片的X和Y的值。
保存为xml
workbook.SaveAsXml(strFullName);
保存到文件流
using (var stream = new FileStream(strFullName, FileMode.Create))
{
workbook.SaveToStream(stream);
}
二、样式
1、文本样式
设置单元格字体样式
sheet.Range["C5:E6"].Value = "aaabbbccc";
sheet.Range["C5:E6"].Style.Font.Color = Color.FromArgb(, , );//文本颜色
sheet.Range["C5:E6"].Style.Font.IsBold = true;//字体是否加粗
sheet.Range["C5:E6"].Style.Font.IsItalic = true;//是否斜体
sheet.Range["C5:E6"].Style.Font.Underline = FontUnderlineType.Single;//下划线
sheet.Range["C5:E6"].Style.Font.IsSuperscript = true;//是否呈现为下标
sheet.Range["C5:E6"].Style.Font.FontName = "华文彩云";//字体名称
sheet.Range["C5:E6"].Style.Font.Size = ;//字体大小
得到结果

2、单元格样式
关于单元格样式设置
sheet.Range["C5:E6"].Style.HorizontalAlignment = HorizontalAlignType.Center;//水平对齐
sheet.Range["C5:E6"].Style.VerticalAlignment = VerticalAlignType.Center;//垂直对齐
sheet.Range["C5:E6"].ColumnWidth = ;//单元格的宽度
sheet.Range["C5:E6"].RowHeight = ;//行高
sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;//边框
sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
3、表格样式
下面来一个奇偶行的样式:
public static void sheetStyle(Workbook book, Worksheet sheet)
{
CellStyle oddStyle = book.Styles.Add("oddStyle");
oddStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
oddStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
oddStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
oddStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
oddStyle.KnownColor = ExcelColors.LightGreen1; CellStyle evenStyle = book.Styles.Add("evenStyle");
evenStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
evenStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
evenStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
evenStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
evenStyle.KnownColor = ExcelColors.LightTurquoise; foreach (CellRange range in sheet.AllocatedRange.Rows)
{
if (range.Row % == )
range.CellStyleName = evenStyle.Name;
else
range.CellStyleName = oddStyle.Name;
} //Sets header style
CellStyle styleHeader = sheet.Rows[].Style;
styleHeader.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
styleHeader.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
styleHeader.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
styleHeader.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
styleHeader.VerticalAlignment = VerticalAlignType.Center;
styleHeader.KnownColor = ExcelColors.Green;
styleHeader.Font.KnownColor = ExcelColors.White;
styleHeader.Font.IsBold = true; sheet.Columns[sheet.AllocatedRange.LastColumn - ].Style.NumberFormat = "\"$\"#,##0";
sheet.Columns[sheet.AllocatedRange.LastColumn - ].Style.NumberFormat = "\"$\"#,##0"; sheet.AllocatedRange.AutoFitColumns();
sheet.AllocatedRange.AutoFitRows(); sheet.Rows[].RowHeight = ;
}
SheetStyle()
效果如下:

4、富文本编辑框
除了上面的一些简单样式外,组件还提供了富文本的编辑方式
ExcelFont fontBold = book.CreateFont();
fontBold.IsBold = true; ExcelFont fontUnderline = book.CreateFont();
fontUnderline.Underline = FontUnderlineType.Single; ExcelFont fontColor = book.CreateFont();
fontColor.KnownColor = ExcelColors.Green; RichText richText = sheet.Range["A1"].RichText;
richText.Text = "Bold and underlined and colored text";
richText.SetFont(, , fontBold);
richText.SetFont(, , fontUnderline);
richText.SetFont(, , fontColor);
效果

当然,这个功能可能在一些特定的场合才会用上。
三、冻结行列
组件提供了非常方便冻结行列的功能。
1、冻结行
sheet.FreezePanes(, 1);
得到结果

2、冻结列
sheet.FreezePanes(, );
得到结果

代码释疑:这里的两个参数怎么理解,第一个参数rowIndex,第二个参数columnIndex。为什么sheet.FreezePanes(2, 1)能冻结首行?这里博主的理解是这里的参数设置的是开始滑动的行和列。也就是说FreezePanes(2,1)表示从第二行、第一列开始可以滑动,而FreezePanes(1,2)表示从第一行、第二列开始可以滑动。这样是不是会好理解一点。
四、合并单元格
关于单元格的合并,组件使用也还算方便。
var mergecolumn = sheet.Merge(sheet.Range[, ], sheet.Range[, ]);
mergecolumn.VerticalAlignment = VerticalAlignType.Center;
mergecolumn.HorizontalAlignment = HorizontalAlignType.Center;
mergecolumn.Text = "第一个合并的单元格" ;
得到结果

五、选项过滤功能
组件提供了方便的组件过滤功能
sheet.AutoFilters.Range = sheet.Range["A1:C1"];
以上表示对A1到C1这个区域的所有文本框进行过滤。效果如下:

六、下拉框
在Excel里面,经常需要用到的一个功能就是在编辑单元格的时候使用下拉框,这样方便了一些特定项的编辑。同样,组件也为我们提供了这个功能
//下拉框
CellRange range = sheet.Range["A2:A6"];
//给E1到E10所有的单元格添加下拉选项,数据来源是A2到A6的值
sheet.Range["E1:E10"].DataValidation.DataRange = range;
效果如下:

七、显示、隐藏行列
对于行列隐藏也算是一个常用功能,方法如下
//显示、隐藏行列
sheet.HideColumn();
sheet.HideRow();
//sheet.ShowColumn(10);
//sheet.ShowRow(7);
效果

八、搜索结果高亮
foreach (CellRange range in sheet.FindAllString("行政部", true, true))
{
range.Style.Color = Color.LawnGreen;
}
效果如下

九、总结
至此,组件的一些基础功能介绍完毕。当然,这并不是全部,只是博主选的一些觉得或许有用的功能,更多功能可以参考官网文档。
当然,如果本文能够帮到你,还是希望园友们帮忙推荐,博主下次继续努力!
本文原创出处:http://www.cnblogs.com/landeanfen/
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利
C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)的更多相关文章
- C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有
前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点 ...
- JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)
前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...
- csharp: Export or Import excel using MyXls,Spire.Xls
excel 2003 (效果不太理想) using System; using System.Collections.Generic; using System.ComponentModel; usi ...
- C#组件系列———又一款日志组件:Elmah的学习和分享
前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- C#组件系列——又一款日志组件:Elmah的学习和分享
前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...
- Spire.XLS,生成Excel文件、加载Excel文件
一.组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET.旗下有Spire.Doc,Spire XL ...
- 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍
在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...
- .NET读写Excel工具Spire.Xls使用(1)入门介绍
原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...
随机推荐
- 自己来实现一个简易的OCR
来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...
- 调用微信退款接口或发红包接口时出现System.Security.Cryptography.CryptographicException: 出现了内部错误 解决办法
我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请检查证书密码是不是和商户号一致 2.IIS设置错误,未加载用户配置文件 解决办法:找到网站使用的应 ...
- 【Linux大系】Linux的概念与体系
感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 我在这一系列文章中阐述Linux的基 本概念.Linux操作系统继承自UNIX.一个操作系统是一套控制和使用计算 ...
- 仿陌陌的ios客户端+服务端源码项目
软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...
- Mysql - 存储过程/自定义函数
在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 数据库 oracle数据库基本知识
sqlplus登录 普通用户登录 c:\>sqlplus 请输入用户名:scott 请输入口令: sqlplus scott/ quit退出 管理员登录 sqlplus /nolog 连接数据库 ...
- 练习JavaScript判断上传文件后缀名
<script type = text/javascript> function jiance(filename) { var pic = ["jpg","p ...
- Mono产品生命周期
软件生命周期 同任何事物一样,一个软件产品或软件系统也要经历孕育.诞生.成长.成熟.衰亡等阶段,一般称为软件生命周期(软件生存周期) .软件生命周期模型是指人们为开发更好的软件而归纳总结的软件生命周期 ...
- JavaScript语法
通用变量var 强制整数parseint(): 强制小数parsefloat(): 是不是一个合法的数字isNaN(): if(判断条件) { 满足条件要执行的语句 } else{ 不满足条件要执行的 ...