Spire.XLS
又一款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[0];
- //给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[0];
- //给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, 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 = 0,
- //
- // 摘要:
- // Represents excel version 2010 xlsb
- Xlsb2010 = 1,
- //
- // 摘要:
- // OpenOffice Spreadsheet documents
- ODS = 2,
- //
- // 摘要:
- // Represents excel version 97-2003.
- Version97to2003 = 3,
- //
- // 摘要:
- // Represents excel version 2007
- Version2007 = 4,
- Version2010 = 5,
- //
- // 摘要:
- // Represents excel version 2013.
- Version2013 = 6,
- }

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(0, 100, 190);
- 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(255, 125, 125);//文本颜色
- 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 = 30;//字体大小

得到结果
2、单元格样式
关于单元格样式设置

- sheet.Range["C5:E6"].Style.HorizontalAlignment = HorizontalAlignType.Center;//水平对齐
- sheet.Range["C5:E6"].Style.VerticalAlignment = VerticalAlignType.Center;//垂直对齐
- sheet.Range["C5:E6"].ColumnWidth = 100;//单元格的宽度
- sheet.Range["C5:E6"].RowHeight = 30;//行高
- 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、表格样式
下面来一个奇偶行的样式:
效果如下:
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(0, 3, fontBold);
- richText.SetFont(9, 18, fontUnderline);
- richText.SetFont(24, 30, fontColor);

效果
当然,这个功能可能在一些特定的场合才会用上。
三、冻结行列
组件提供了非常方便冻结行列的功能。
1、冻结行
- sheet.FreezePanes(2, 1);
得到结果
2、冻结列
- sheet.FreezePanes(1, 2);
得到结果
代码释疑:这里的两个参数怎么理解,第一个参数rowIndex,第二个参数columnIndex。为什么sheet.FreezePanes(2, 1)能冻结首行?这里博主的理解是这里的参数设置的是开始滑动的行和列。也就是说FreezePanes(2,1)表示从第二行、第一列开始可以滑动,而FreezePanes(1,2)表示从第一行、第二列开始可以滑动。这样是不是会好理解一点。
四、合并单元格
关于单元格的合并,组件使用也还算方便。
- var mergecolumn = sheet.Merge(sheet.Range[1, 2], sheet.Range[1, 3]);
- 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(10);
- sheet.HideRow(8);
- //sheet.ShowColumn(10);
- //sheet.ShowRow(7);
效果
八、搜索结果高亮
- foreach (CellRange range in sheet.FindAllString("行政部", true, true))
- {
- range.Style.Color = Color.LawnGreen;
- }
效果如下
九、总结
至此,组件的一些基础功能介绍完毕。当然,这并不是全部,只是博主选的一些觉得或许有用的功能,更多功能可以参考官网文档。
当然,如果本文能够帮到你,还是希望园友们帮忙推荐,博主下次继续努力!
本文原创出处:http://www.cnblogs.com/landeanfen/
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利
Spire.XLS的更多相关文章
- C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)
前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我们项目中的一些实际问题,这两天继续研究了下这个组件,觉得有些功能用 ...
- C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有
前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点 ...
- 使用Free Spire.XLS插入图表
使用Free Spire.XLS插入图表 前言 最近在研究Office中间件,上网搜索了下,比较出名的有两个:Aspose和Spire,两者功能齐全,对Office的支持趋近完善,但售价不菲.仔细搜索 ...
- 利用免费的Spire.XLS控件制作Excel报表
我们小组上个季度接手了一个项目其中需要实现创建excel文档的功能,寻找实现这个功能的控件的任务分配给了我,通过百度搜索我找到了一个免费的控件,它是由E-iceblue公司推出的spire.xls控件 ...
- 使用SPIRE.XLS来创建Excel 工作簿
使用SPIRE.XLS来创建Excel 工作簿 概要 最近在研究 .NET 控件,使用这些控件在程序中可以快速低成本实现功能. 在这一篇中我们使用的控件是Spire.XL ...
- Office组件之Spire.XLS的DotNet操作
Overview 在项目中,我们经常需要将程序中获得的大量数据导出到Excel表格中,打印报表:进一步,还可能生成其折线图,对数据的变化趋势进行分析,从而更好地开展项目工作. 最近,我发现了一个对于D ...
- 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍
在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...
- 【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(3)单元格控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
随机推荐
- linux 入侵检查转载
转载 本文给大家收集整理了一些审查Linux系统是否被入侵的方法,这些方法可以添加到你运维例行巡检中. 1. 检查帐户 代码如下: # less /etc/passwd # grep :0: /etc ...
- Unity3D跨平台时partial分部方法的使用
最近看到项目中插件的一部分逻辑,发现问题多多,可读性很差,并且容易出错,于是随手整理了下逻 辑.Unity3D的插件逻辑,因为要考虑到针对各平台的移植,因此会大片的出现#if/#endif等条件编译, ...
- jquery validate.js表单验证的基本用法入门
这里转载一篇前辈写的文章,在我自己的理解上修改了一下,仅作记录. 先贴一个国内某大公司的代码: 复制代码 代码如下: <script type="text/javascript&quo ...
- android自定义TabWidget
在做项目的时候,需要用到这个选项卡,刚开始看了系统的tabwidget,囧了,底边有黑线不说,还不美观,扒了好多的网页发现前辈做的能够满足自己的需求,将代码修改了下,就能用喽,伟人说过,站在前辈的肩膀 ...
- LabVIEW系列——拍振现象重现
- UDP打洞和心跳包设计
一.设备终端class DeviceClient { int deviceID; int IP; int port; char connectID[16]; time_t lastTime; stru ...
- Android(java)学习笔记180:Android MediaPlayer 播放prepareAsync called in state 8解决办法
使用android MediaPlayer播放音频文件时,有时会出现prepareasync called in state 8错误. 以下方法可以避免这个异常出现. 第一种方法: private ...
- 使用httpModule做权限系统
页面请求过程: 根据这个流程,网上一般的权限验证在:Http.Module.AuthorizeRequestHttp.Module.PreRequestHandlerExecute 例如使用前者: u ...
- JPA entity versioning (@Version and Optimistic Locking)
详情见: http://www.byteslounge.com/tutorials/jpa-entity-versioning-version-and-optimistic-locking
- Spring中 bean定义的parent属性机制的实现分析
在XML中配置bean元素的时候,我们常常要用到parent属性,这个用起来很方便就可以让一个bean获得parent的所有属性 在spring中,这种机制是如何实现的? 对于这种情况 tra ...