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[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、表格样式

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

  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(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/p/5906077.html,如需转载请自行联系原作者

目录
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32689 78
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17740 19
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36674 19
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24753 14
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36657 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29834 52

热门文章

最新文章

下一篇
开通oss服务