本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

.NET读写Excel工具Spire.Xls使用文章目录:http://www.cnblogs.com/asxinyu/p/4374032.html

  前一篇文章:“.NET操作Excel利器Spire.Xls使用(1)入门介绍 ”给大家介绍了Spire.XLS的基本功能和一些比较。这篇文章将重点介绍C#操作Excel文件时,对Excel文件本身的相关设置,全局控制的内容。因为这也是C#读写Excel文件时经常碰到的文章,也是我在使用过程中的一个学习步骤。本文将首先介绍Spire.XLS创建和加载文档的基础知识,以及文件保存,多个Excel文件合并的操作方法,其中我们还可以对生成的Excel文件做更多详细的设置,如,对Excel文件属性进行设置等等,其次很多项目中,不仅要生成Excel文件,还需要打印并获取一些分页信息;最后介绍一下使用C#设置加密保护Excel文件的方法。

1.Excel文档的创建、加载与保存

  我们的上一篇文章的初步介绍中,有一个Hello Excel的例子,其实就已经包括了Excel文件新建和保存的方法,非常简单。这一节将着重对每个细节进行更详细点的研究。

1.1 保存Excel文件

  Excle文件的保存都是使用Workbook的SaveToFile方法,有以下几个版本,可以根据自己的需要,根据文件名,Excel文件版本,以及文件格式来保存,方法原型如下,比较简单不再演示,在后续的文章中会在代码中用到。

 //根据文件名,文件版本,文件格式信息来保存文件
 public void SaveToFile(string fileName);
 public void SaveToFile(string fileName, ExcelVersion version);
 public void SaveToFile(string fileName, FileFormat fileFormat);
 public void SaveToFile(string fileName, string separator);

1.2 从不同途径加载Excel

  使用C#操作Excel文件,不一定都是生成Excel文件报表之类的,有时候也需要加载已经存在的数据(XML,Excle等)来进行修改,然后保存到对应的Excel文件中去。加载到Excel的方法是Workbook对象的LoadFromFile、LoadFromStream、LoadFromXml等方法,方法原型有以下几个:

 //从文件加载,根据文件名,保护模式和Excel版本
 public void LoadFromFile(string fileName);
 public void LoadFromFile(string fileName, bool preserveMode);
 public void LoadFromFile(string fileName, ExcelVersion version);
 public void LoadFromFile(string fileName, string separator);
 public void LoadFromFile(string fileName, string separator, int row, int column);
 public void LoadFromFile(string fileName, string separator, int row, int column, ExcelVersion version);
 //从数据流中加载
 public void LoadFromStream(Stream stream);
 public void LoadFromStream(Stream stream, bool loadStyles);
 public void LoadFromStream(Stream stream, ExcelVersion version);
 //从XML文件加载
 public void LoadFromXml(Stream stream);
 public void LoadFromXml(string fileName);
 //从模版文件加载
 public void LoadTemplateFromFile(string fileName);
 public void LoadTemplateFromFile(string fileName, bool loadStyles);

2.C#设置Excel文件属性

  文件属性这个虽然一般人很少用到,但还是介绍一下,毕竟如果文件分发出去的话,将相关属性信息添加完整,还是很有必要的。Excel文件属性可以点击文件右键-属性看到界面,如下图我使用WPS查看的Excel文件属性,使用Office Excel查看的话,是右边的样子,虽然显示不一样,但原理是一样的:

  
      1.WPS显示的Excel属性                                             2.Office Excle显示的文件属性

  设置Excel文件属性的方法在Workbook对象的DocumentProperties属性中,这个属性是一个XlsBuiltInDocumentProperties类型,在Spire.Xls.Core.Spreadsheet.Collections命名空间,通过VS的对象浏览器也可以发现其实现的一些原理,可以扩展到其他的组件使用中。看看一个简单的例子:

 #region 2.Excel文件属性例子
 static void ExcelTest2()
 {
     Workbook workbook = new Workbook();

     //修改文档属性信息,这样在发布的时候,可以通过文档显示公司以及文件人的信息
     workbook.DocumentProperties.Author = "张三";            //作者
     workbook.DocumentProperties.Subject = "测试文件属性";   //主题
     workbook.DocumentProperties.Title = "测试Excel文件";    //标题
     workbook.DocumentProperties.Company = "XX有限公司";     //单位
     workbook.DocumentProperties.Comments = "保留文件评论";  //评论
     workbook.DocumentProperties.Keywords = "测试 Excel ";   //关键词
     workbook.DocumentProperties.CreatedTime = DateTime.Now; //创建时间
     //TODO:还有其他属性,可以参考XlsBuiltInDocumentProperties的相关属性          

     //将Excel文件保存到指定文件,还可以指定Excel版本
     workbook.SaveToFile("Sample.xls", ExcelVersion.Version2007);
 }
 #endregion

  注意,由于我没有安装Office 2007及以上版本,用WPS显示的时候,有点问题,要用WPS转换为2003版本后才能看出来,这可能是WPS的原因,调试生成的文件发现,这些属性值都是存在的。所以我也没去折腾,安装个Office 真的很麻烦。

3.C#加密和保护Excel文件

  相信很多人都用过Office的加密以及保护功能,对于Excel来说,加密和保护的范围更加广泛了:不仅可以加密文件,还可以保护指定的Sheet,指定的单元格等等。其实开源的NPOI组件也可以这样做,以前没用过但了解过,用NPOI的朋友可以看看这个:http://tonyqus.sinaapp.com/archives/196,既然要用Spire.XLS,那就看看如何做。

3.1 加密Excel文件

  Excel文件级的加密其实很简单,就是Workbook对象的Protect方法,传递加密密码即可;如果想要取消密码,则使用workbook.UnProtect(),注意取消加密是不需要密码的,Excel软件操作也是的,所以程序操作也不需要。

 #region 3.加密Excel文件例子
 static void ExcelTest3()
 {
     Workbook workbook = new Workbook();
     workbook.Protect("pwd111");//设置保护加密的 密码 :pwd111
     //将Excel文件保存
     workbook.SaveToFile("Sample.xls", ExcelVersion.Version2007);
 }
 #endregion

加密后打开文件就是这个样子了:

3.2 保护Sheet与单元格

  Sheet的保护更加灵活一点,使用的是Worksheet对象的Protect方法,传递的参数是 保护的密码,以及可选的保护类型(更加丰富的保护类型),看看下面的例子:

 Workbook workbook = new Workbook();

 Worksheet sheet = workbook.Worksheets[];

 //保护sheet
 sheet.Protect("test", SheetProtectionType.All);

 //将Excel文件保存
 workbook.SaveToFile("Sample.xlsx", ExcelVersion.Version2010);

实现的效果应该和WPS的“保护工作表”界面类似,如下图:

保护工作表的作用一般是防止误操作或者对于有版权保护的,不能轻易更改的情况。大家看情况使用,我这里很少用到,只是了解到了,顺便说一下。

 static void ExcelTest4()
 {
     Workbook workbook = new Workbook();
     workbook.CreateEmptySheets();
     Worksheet sheet = workbook.Worksheets[];

     sheet.Range["A1"].Text = "锁定";
     sheet.Range["B1"].Text = "未锁定";

     sheet.Range["A1"].Style.Locked = true;
     sheet.Range["B1"].Style.Locked = false;

     //一定要对工作表进行保护,才能生效
     sheet.Protect("test", SheetProtectionType.All);

     workbook.SaveToFile(@"Sample_Lock.xlsx", ExcelVersion.Version2010);
 }

  今天就到此为止把,虽然都很简单,但了解一下,对以后熟练开发还是有好处的。例子非常简单,代码都在上面,到本系列完成后,再打包一份代码。

随机推荐

  1. 如何利用excel中的数据源制作数据地图

    关于这个问题,制作数据地图的方法已不新奇,总体来说有这么几类方案: 一类方案:直接在excel里制作 优势:个人小数据量应用较为方便简单 缺点:需要熟悉VBA,且更强大的功能对VBA水平要求较高 1. ...

  2. linux环境搭建

    gcc编译安装 解压下载的gcc包:tar -xxx gcc-xxxx.xxx.xx 下载安装gcc依赖库:./contrib/download_prerequisites configure一个Ma ...

  3. C# 窗体(登录界面)

    首先拖动一个  lable(写用户名)  后面 跟一个Textbox 再lable(写密码) 后面 跟一个Textbox(需设置一下属性—行为—useSystemPasswordChar(默认输入的密 ...

  4. BZOJ 2962

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 618  Solved: 225[Submit][Status][Discuss] ...

  5. Android -- 带你从源码角度领悟Dagger2入门到放弃

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  6. 让 Homebrew 走代理更新 + brew 管理 node 版本

    0.前言 环境:MacOS 背景:整理下今天所做的配置. 1. 让 Homebrew 走代理更新 brew update 就卡住了,即使开了 shadowsocks 也不行.因为 shadowsock ...

  7. android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具

    Android设备打印比较麻烦,一般设备厂商都提供原生app开发的SDK,我们web开发者为难了,不会原生开发啊 给大家提供一个思路,实现web加壳,利用打印浏览器实现 简单来说就是把我们的web页面 ...

  8. Linux 系统状态、常用快捷键

    1.查看系统状态 ()df -h #查看分区状态. ()mount #查看文件系统类型. ()du -h -max-depth= 目录名 #查看目录文件大小,批量查找. ()du -sh #查看目录文 ...

  9. 题解——loj6279 数列分块入门3 (分块)

    用set维护有序序列 或许sort也可以,但这题的前驱定义是严格小于 所以要去重 然后就是记得自己打的加法tag在query的时候一定要算上 话说这题数据有点fake啊忘了查询算上自己的标记了还有70 ...

  10. Codeforces 595D - Max and Bike

    595D - Max and Bike 思路:开始和结束时的计时器的高度相同时(也就是关于圆竖着直径对称)时间最少. 证明: 总距离为d. 圆周长为s=2*π*r. 设len=d-floor(d/s) ...