前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我们项目中的一些实际问题,这两天继续研究了下这个组件,觉得有些功能用起来还是挺方便的,这篇继续来看看Spire.XLS的一些其他功能,说不定有你需要的呢~~

本文原创地址:http://www.cnblogs.com/landeanfen/p/5906077.html

一、基础入门

1、新建Workbook

Spire.XLS提供了多种方式创建Workbook对象

1.1、新建空的Workbook

  1. //新建Workbook
  2. Workbook workbook = new Workbook();
  3. //得到第一个Sheet页
  4. Worksheet sheet = workbook.Worksheets[];
  5.  
  6. //给A2这个单元格设置值
  7. sheet.Range["A2"].Text = "你好,Jim" ;
  8.  
  9. //保存到物理路径
  10. var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
  11. workbook.SaveToFile(strFullName);

就这么简单生成一个Excel文件

1.2、根据物理路径生成Workbook

  1. //新建Workbook
  2. Workbook workbook = new Workbook();
  3. //将当前路径下的文件内容读取到workbook对象里面
  4. workbook.LoadFromFile(@"D:\Data\Upload\Export20160926114559.xlsx");
  5.  
  6. //得到第一个Sheet页
  7. Worksheet sheet = workbook.Worksheets[];
  8. //给A2这个单元格设置值
  9. sheet.Range["C5"].Text = "你好,Jim" ;
  10.  
  11. //保存到物理路径
  12. var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
  13. workbook.SaveToFile(strFullName,ExcelVersion.Version2010);

1.3、根据文件流生成Workbook

上篇我们演示过多次,对于Web里面的文件上传,多用此方法。

  1. //得到当前请求的文件
  2. var oFile = Request.Files["txt_file"];
  3.  
  4. //根据当前的文件流生成Workbook对象
  5. Workbook book = new Workbook();
  6. book.LoadFromStream(oFile.InputStream);

1.4、根据Excel模板生成Workbook

这种用法适用于项目需要使用Excel模板的时候,比如我们项目需要导出的每一个Excel都适用如下模板:

那么,我们每次生成Excel的时候可以根据该模板去创建Workbook

  1. //新建Workbook
  2. Workbook workbook = new Workbook();
  3. //根据模板生成Workbook
  4. workbook.LoadTemplateFromFile(@"D:\Data\Upload\Template.xlsx");

这样得到的Excel文件将会自动套用该模板样式。

2、读写Workbook

2.1、根据单元格的名称框来读写Excel

关于Workbook的读写,上文已经提供了一种方式,形如:

  1. sheet.Range["C5"].Text = "你好,Jim" ;

这样就能给C5单元格赋值,如果是取值,可以直接使用同样的方式。当然,除了Text字符串的内容,组件还提供了NumberValue、DateTimeValue、BooleanValue等属性,用于读写数字、时间、bool类型的值。

当然,Range除了支持基础的单元格名称框来读写值之外,它还提供了给某一个区域的文本框赋值的功能。比如

  1. sheet.Range["C5:E6"].Value = "你好,Jim" ;

这一句表示给C5-E6这一区域的文本框统一赋值。得到结果如下:

如果需要操作当前区域的所有单元格,可以这样:

  1. var columes = sheet.Range["C5:E6"].Columns ;
  2. foreach (var column in columes)
  3. { }

2.2、根据单元格的行列索引来读写Excel

除了上面的方式,组件还支持通过行列的索引去给单元格取赋值。

  1. sheet.Range[, 1].Text = "部门名称";

以上一句表示给第一个行第一列单元格赋值。

3、保存Workbook

关于Excel的保存,组件同样提供了多种方式。

3.1、直接保存的方式:SaveToFile()

  1. var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
  2. workbook.SaveToFile(strFullName);

值得一提的是,SaveToFile还支持保存不同版本的Excel,来看这个重载

  1. public void SaveToFile(string fileName, ExcelVersion version);

ExcelVersion是一个枚举类型,定义了各种不同版本的Excel:

  1. public enum ExcelVersion
  2. {
  3. // 摘要:
  4. // Represents excel version 2007 xlsb
  5. Xlsb2007 = ,
  6. //
  7. // 摘要:
  8. // Represents excel version 2010 xlsb
  9. Xlsb2010 = ,
  10. //
  11. // 摘要:
  12. // OpenOffice Spreadsheet documents
  13. ODS = ,
  14. //
  15. // 摘要:
  16. // Represents excel version 97-2003.
  17. Version97to2003 = ,
  18. //
  19. // 摘要:
  20. // Represents excel version 2007
  21. Version2007 = ,
  22. Version2010 = ,
  23. //
  24. // 摘要:
  25. // Represents excel version 2013.
  26. Version2013 = ,
  27. }

3.2、保存并且转换文件

上篇介绍Excel转PDF的时候,我们知道组件提供了SaveToPdf()方法直接将Excel保存成为pdf文件,用法如下:

  1. //保存到物理路径
  2. var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
  3. workbook.SaveToPdf(strFullName)

除了保存成为pdf之外,还支持转换成其他格式:

保存为image

  1. var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png";
  2. var image = workbook.SaveAsImage(, , );
  3. image.Save(strFullName);

SaveAsImage()第一个参数表示需要生成图片的Sheet页的索引;第二、三个参数表示生成图片的X和Y的值。

保存为xml

  1. workbook.SaveAsXml(strFullName);

保存到文件流

  1. using (var stream = new FileStream(strFullName, FileMode.Create))
  2. {
  3. workbook.SaveToStream(stream);
  4. } 

二、样式

1、文本样式

设置单元格字体样式

  1. sheet.Range["C5:E6"].Value = "aaabbbccc";
  2. sheet.Range["C5:E6"].Style.Font.Color = Color.FromArgb(, , );//文本颜色
  3. sheet.Range["C5:E6"].Style.Font.IsBold = true;//字体是否加粗
  4. sheet.Range["C5:E6"].Style.Font.IsItalic = true;//是否斜体
  5. sheet.Range["C5:E6"].Style.Font.Underline = FontUnderlineType.Single;//下划线
  6. sheet.Range["C5:E6"].Style.Font.IsSuperscript = true;//是否呈现为下标
  7. sheet.Range["C5:E6"].Style.Font.FontName = "华文彩云";//字体名称
  8. sheet.Range["C5:E6"].Style.Font.Size = ;//字体大小

得到结果

2、单元格样式

关于单元格样式设置

  1. sheet.Range["C5:E6"].Style.HorizontalAlignment = HorizontalAlignType.Center;//水平对齐
  2. sheet.Range["C5:E6"].Style.VerticalAlignment = VerticalAlignType.Center;//垂直对齐
  3. sheet.Range["C5:E6"].ColumnWidth = ;//单元格的宽度
  4. sheet.Range["C5:E6"].RowHeight = ;//行高
  5. sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;//边框
  6. sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
  7. sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
  8. sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;

3、表格样式

下面来一个奇偶行的样式:

  1. public static void sheetStyle(Workbook book, Worksheet sheet)
  2. {
  3. CellStyle oddStyle = book.Styles.Add("oddStyle");
  4. oddStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
  5. oddStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
  6. oddStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
  7. oddStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
  8. oddStyle.KnownColor = ExcelColors.LightGreen1;
  9.  
  10. CellStyle evenStyle = book.Styles.Add("evenStyle");
  11. evenStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
  12. evenStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
  13. evenStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
  14. evenStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
  15. evenStyle.KnownColor = ExcelColors.LightTurquoise;
  16.  
  17. foreach (CellRange range in sheet.AllocatedRange.Rows)
  18. {
  19. if (range.Row % == )
  20. range.CellStyleName = evenStyle.Name;
  21. else
  22. range.CellStyleName = oddStyle.Name;
  23. }
  24.  
  25. //Sets header style
  26. CellStyle styleHeader = sheet.Rows[].Style;
  27. styleHeader.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
  28. styleHeader.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;
  29. styleHeader.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
  30. styleHeader.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
  31. styleHeader.VerticalAlignment = VerticalAlignType.Center;
  32. styleHeader.KnownColor = ExcelColors.Green;
  33. styleHeader.Font.KnownColor = ExcelColors.White;
  34. styleHeader.Font.IsBold = true;
  35.  
  36. sheet.Columns[sheet.AllocatedRange.LastColumn - ].Style.NumberFormat = "\"$\"#,##0";
  37. sheet.Columns[sheet.AllocatedRange.LastColumn - ].Style.NumberFormat = "\"$\"#,##0";
  38.  
  39. sheet.AllocatedRange.AutoFitColumns();
  40. sheet.AllocatedRange.AutoFitRows();
  41.  
  42. sheet.Rows[].RowHeight = ;
  43. }

SheetStyle()

效果如下:

4、富文本编辑框

除了上面的一些简单样式外,组件还提供了富文本的编辑方式

  1. ExcelFont fontBold = book.CreateFont();
  2. fontBold.IsBold = true;
  3.  
  4. ExcelFont fontUnderline = book.CreateFont();
  5. fontUnderline.Underline = FontUnderlineType.Single;
  6.  
  7. ExcelFont fontColor = book.CreateFont();
  8. fontColor.KnownColor = ExcelColors.Green;
  9.  
  10. RichText richText = sheet.Range["A1"].RichText;
  11. richText.Text = "Bold and underlined and colored text";
  12. richText.SetFont(, , fontBold);
  13. richText.SetFont(, , fontUnderline);
  14. richText.SetFont(, , fontColor);

效果

当然,这个功能可能在一些特定的场合才会用上。

三、冻结行列

组件提供了非常方便冻结行列的功能。

1、冻结行

  1. sheet.FreezePanes(, 1);

得到结果

2、冻结列

  1. sheet.FreezePanes(, );

得到结果

代码释疑:这里的两个参数怎么理解,第一个参数rowIndex,第二个参数columnIndex。为什么sheet.FreezePanes(2, 1)能冻结首行?这里博主的理解是这里的参数设置的是开始滑动的行和列。也就是说FreezePanes(2,1)表示从第二行、第一列开始可以滑动,而FreezePanes(1,2)表示从第一行、第二列开始可以滑动。这样是不是会好理解一点。

四、合并单元格

关于单元格的合并,组件使用也还算方便。

  1. var mergecolumn = sheet.Merge(sheet.Range[, ], sheet.Range[, ]);
  2. mergecolumn.VerticalAlignment = VerticalAlignType.Center;
  3. mergecolumn.HorizontalAlignment = HorizontalAlignType.Center;
  4. mergecolumn.Text = "第一个合并的单元格" ;

得到结果

五、选项过滤功能

组件提供了方便的组件过滤功能

  1. sheet.AutoFilters.Range = sheet.Range["A1:C1"];

以上表示对A1到C1这个区域的所有文本框进行过滤。效果如下:

六、下拉框

在Excel里面,经常需要用到的一个功能就是在编辑单元格的时候使用下拉框,这样方便了一些特定项的编辑。同样,组件也为我们提供了这个功能

  1. //下拉框
  2. CellRange range = sheet.Range["A2:A6"];
  3. //给E1到E10所有的单元格添加下拉选项,数据来源是A2到A6的值
  4. sheet.Range["E1:E10"].DataValidation.DataRange = range;

效果如下:

七、显示、隐藏行列

对于行列隐藏也算是一个常用功能,方法如下

  1. //显示、隐藏行列
  2. sheet.HideColumn();
  3. sheet.HideRow();
  4. //sheet.ShowColumn(10);
  5. //sheet.ShowRow(7);

效果

八、搜索结果高亮

  1. foreach (CellRange range in sheet.FindAllString("行政部", true, true))
  2. {
  3. range.Style.Color = Color.LawnGreen;
  4. }

效果如下

九、总结

至此,组件的一些基础功能介绍完毕。当然,这并不是全部,只是博主选的一些觉得或许有用的功能,更多功能可以参考官网文档。

当然,如果本文能够帮到你,还是希望园友们帮忙推荐,博主下次继续努力!

本文原创出处:http://www.cnblogs.com/landeanfen/

欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利

C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有(二)的更多相关文章

  1. C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有

    前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点 ...

  2. JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

    前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...

  3. csharp: Export or Import excel using MyXls,Spire.Xls

    excel 2003 (效果不太理想) using System; using System.Collections.Generic; using System.ComponentModel; usi ...

  4. C#组件系列———又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

  5. JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)

    前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...

  6. C#组件系列——又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

  7. Spire.XLS,生成Excel文件、加载Excel文件

    一.组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET.旗下有Spire.Doc,Spire XL ...

  8. 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍

    在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...

  9. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

随机推荐

  1. Hive安装配置指北(含Hive Metastore详解)

    个人主页: http://www.linbingdong.com 本文介绍Hive安装配置的整个过程,包括MySQL.Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区 ...

  2. 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  3. Python(九)Tornado web 框架

    一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...

  4. 设计模式C#合集--工厂方法模式

    简单工厂,代码: public interface ISpeak { public void Say(); } public class Hello : ISpeak { public void Sa ...

  5. PHP设计模式(八)桥接模式(Bridge For PHP)

    一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...

  6. hbase集群安装与部署

    1.相关环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4 本篇文章仅涉及hbase集群的搭建,关于hadoop与zookeeper的相关部 ...

  7. 从贝叶斯到粒子滤波——Round 1

    粒子滤波确实是一个挺复杂的东西,从接触粒子滤波到现在半个多月,博主哦勒哇看了N多篇文章,查略了嗨多资料,很多内容都是看了又看,细细斟酌.今日,便在这里验证一下自己的修炼成果,请各位英雄好汉多多指教. ...

  8. fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)

    andrew,20130601,guilin 本文记录在树莓派(fedora)上部署ASP.NET MVC2 的过程. 本文共分为六部分,分别是前置条件,Apache的安装,Mysql的安装,安装mo ...

  9. ABP理论之时间

    返回总目录 本篇目录 介绍 Clock 时区 绑定器和转换器 介绍 虽然有些应用针对的是一个特定的时区,但是也有一些应用针对多个不同的时区.为了满足这些需求,ABP为datetime操作提供了通用的基 ...

  10. Linux C++ 开发简介

    主要介绍将Windows程序迁移到Linux系统相关知识 简介 Windows程序迁移到Linux系统可能需要修改很多代码, 既需要了解Linux平台的开发知识, 也需要了解Windows平台代码如何 ...