一、基础入门

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 xlsbXlsb2007 = 0,//// 摘要: //     Represents excel version 2010 xlsbXlsb2010 = 1,//// 摘要: //     OpenOffice Spreadsheet documentsODS = 2,//// 摘要: //     Represents excel version 97-2003.Version97to2003 = 3,//// 摘要: //     Represents excel version 2007Version2007 = 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、表格样式

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

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 % 2 == 0)range.CellStyleName = evenStyle.Name;elserange.CellStyleName = oddStyle.Name;}//Sets header styleCellStyle styleHeader = sheet.Rows[0].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 - 1].Style.NumberFormat = "\"$\"#,##0";sheet.Columns[sheet.AllocatedRange.LastColumn - 2].Style.NumberFormat = "\"$\"#,##0";sheet.AllocatedRange.AutoFitColumns();sheet.AllocatedRange.AutoFitRows();sheet.Rows[0].RowHeight = 20;}

效果如下:

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:一款Excel处理神器(2)相关推荐

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

    阅读目录 一.组件介绍 二.组件安装使用 1.官方下载安装 2.Nuget安装 三.组件功能介绍 1.Excel转PDF 2.Excel生成图表 3.其他功能介绍 四.总结 正文 前言:最近项目里面有 ...

  2. C#组件系列——又一款Excel处理神器Spire.XLS(二)

    阅读目录 一.基础入门 1.新建Workbook 2.读写Workbook 3.保存Workbook 二.样式 1.文本样式 2.单元格样式 3.表格样式 4.富文本编辑框 三.冻结行列 1.冻结行 ...

  3. C#组件系列——又一款Excel处理神器Spire.XLS(一)

    阅读目录 一.组件介绍 二.组件安装使用 1.官方下载安装 2.Nuget安装 三.组件功能介绍 1.Excel转PDF 2.Excel生成图表 3.其他功能介绍 四.总结 正文 前言:最近项目里面有 ...

  4. Spire.XLS:一款Excel处理神器

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

  5. 使用Spire.XLS来创建Excel 工作簿

    概要 最近在研究 .NET 控件,使用这些控件能在程序中可以快速低成本实现开发功能.前面提到了如何使用Spire.XLS来制作报表,在这一篇中我 将讲到的是如何用用它来创建一个简单的Excel工作簿. ...

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

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

  7. 【目录】C#操作Excel组件Spire.XLS系列文章目录

    本博客所有文章分类的总目录链接:http://www.cnblogs.com/asxinyu/p/4288836.html 1.C#操作Excel组件Spire.XLS文章目录 1.[原创].NET读 ...

  8. 国产Excel开发组件Spire.XLS【转换】教程(4):C#/VB.NET:将 Excel 转换为图像

    在日常工作中,您可能会遇到一些需要将 Excel 转换为图像的情况,例如将单元格区域附加到 PowerPoint 演示文稿或通过电子邮件安全地发送电子表格数据.本文将从以下两个方面向您展示如何使用Sp ...

  9. Excel控件 Spire.XLS系列教程(2):C# 设置现有 Excel 图表的数据标签样式

    Spire.XLS是一款专业的Excel控件,无需安装微软Excel,也能拥有Excel的全套功能,能够为工厂智能化提供完善的Excel需求. Excel中图表的数据标签不仅可以增强图表的可读性,还可 ...

最新文章

  1. JS简单实现自定义右键菜单
  2. node都会 react_学react需要node吗
  3. CI Weekly #7 | Instgram/Quora 等大公司如何做持续部署?
  4. Java集合TreeMap
  5. golang的基本数据类型和数组默认都是值传递的
  6. 【代码学习】lua+redis分布式锁代码实现实例
  7. uva1152 - 4 Values whose Sum is 0(hash或STL技巧ac)
  8. js关闭iframe窗口_[Selenium]24.处理弹窗新式的模态窗口
  9. 【读书笔记】设计模式沉思录
  10. 告别卷积神经网络CNN?计算机视觉也能用上 Transformer 了
  11. alpine linux安装java,alpinelinux安装openjre
  12. LA 4123 (计数 递推) Glenbow Museum
  13. android setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds区别
  14. 在Wireshark的tcptrace图中看清TCP拥塞控制算法的细节(CUBIC/BBR算法为例)
  15. C++ 栈实现逆波兰式求解运算式和两栈共享存储空间
  16. 外贸术语 交货条件(zt)
  17. 洛依微服务版本简单研究
  18. Jupyter Notebooks学习分享
  19. 学习Linux/Unix这么久了,你真的知道什么是终端吗?
  20. 分层化网络设计:核心层,汇聚层,接入层

热门文章

  1. 航班信息显示系统-总结
  2. USB1.1 协议开发
  3. 艾司博讯:拼多多全店推广是什么意思?
  4. JS:利用函数,求任意三个数最大值,任意两个数的任意运算结果,判断任意数值是否为素数。
  5. Manjaro为包管理器pacman和yaourt\yay 添加多线程下载
  6. 2023考研数学冲刺模拟卷资源———以及模拟卷难度评估
  7. EMQ X 存储消息到 MySQL 数据库
  8. Java第n次入门之画板的实现
  9. 2008.12.7微明(杭州)信息科技有限公司
  10. 2021qq匿名说说在哪里