Excel处理神器Spire.XLS,我的第一节封装

正文

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

  1. 导入Excel后,需要切割Excel的Sheet页,然后每个Sheet页单独生成一个PDF文件。
  2. 导出Excel的时候,项目里面需要将一些数据表格以图表的形式在Excel里面展示。

一、组件介绍

Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET。旗下有Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等多款专业组件,为各种Office文档在程序处理上提供了很大的方便,官方为各种功能提供了大量的在线api,简化了使用组件的难度。组件使用时不需要本地Office组件的支持。Spire.Office是一款企业级组件,它提供了收费版本和免费版本两种级别,一般来说,对于个人的应用,免费版本已足够用。比如对于上文博主遇到的问题,Spire.XLS组件就提供了很好的实现机制,如果你也遇到了NPOI解决不了的问题,不妨试试这个。

“XLS”是Excel文件的后缀之一,顾名思义,Spire.XLS当然就是针对Excel表格处理的组件喽,本篇,博主将结合上文遇到的问题来看看Spire.XLS组件的强大功能。

回到顶部

二、组件安装使用

对于组件的安装,在此还是提供两种方式:

回到顶部

1、官方下载安装

下载地址。官方下载的安装包是msi结尾的,安装时需要选择支持的VS版本等信息,软件的安装就不做过多说明,有兴趣的可以下载试试。

回到顶部

2、Nuget安装

大家最喜欢的应该还是Nuget方式吧,简单,方便,并且易于管理。博主也是不太喜欢为了一个组件而去单独下载一个安装包。

Spire.XLS也提供了Nuget的方式,只需要搜索Spire,选择免费版的组件即可:

安装完成后自动引用了需要的dll

回到顶部

三、组件功能介绍

关于Excel的一些常用操作,比如取值、赋值、设置单元格样式等,这里就不做过多介绍,无论是Com组件、NPOI还是Aspose,这些都是最基础的功能。下面就针对上文提出的几个问题着重说明下。

四、写个程序试一试

今天,我大致封装了下

简介:本程序用到了三个关联的类,分别为:SpireInfo.cs 和 FlexPaperConfig.cs 和 LoadConfig.cs

SpireInfo.cs 主要用于操作Excel文件,例如,创建Excel文件、 加载Excel文件、 创建带有密码保护的Excel文件 、释放资源、消除Excel密码等,FlexPaperConfig.cs、LoadConfig.cs 这两个类主要操作一个配置文件,我们利用配置文件存放Excel路径,利用XML 读取配置文件等

下面分别贴出代码:

namespace CommonCS
{
    /// <summary>
    /// 20170425陈卧龙创建 office版本为2010  扩展名为xlsx 在此不作重复说明
    /// </summary>
    public class SpireInfo
    {
        LoadConfig config = new LoadConfig();
        Workbook workbook = new Workbook();

        #region 创建并保存Excel
        /// <summary>
        /// 简单保存一个Excel文件
        /// <param name="pwd">是否加密 如果加密 pwd为Excel文件打开的密码</param>
        /// </summary>
        public void SavaXls(string pwd = "")
        {

            string Pth = config.configManager.getConfig("path.xls") + DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".xlsx";
            if (!string.IsNullOrEmpty(pwd))
            {
                workbook.Protect(pwd);//设置保护加密的 密码 :pwd
            }
            //将Excel文件保存到指定文件,还可以指定Excel版本
            workbook.SaveToFile(Pth, ExcelVersion.Version2010);
        }

        /// <summary>
        /// 保存详细属性的Excel文件
        /// </summary>
        /// <param name="xls"></param>
        /// <param name="pwd">如果是加密的Excel 文件的详情将不会显示</param>
        public void SavaXls(XlsInfo xls, string pwd = "")
        {
            string Pth = xls.xlsFileName;
            //修改文档属性信息,这样在发布的时候,可以通过文档显示公司以及文件人的信息
            workbook.DocumentProperties.Author = xls.xlsAuthor;            //作者
            workbook.DocumentProperties.Subject = xls.xlsSubject;   //主题
            workbook.DocumentProperties.Title = xls.xlsTitle;    //标题
            workbook.DocumentProperties.Company = xls.xlsCompany;     //单位
            workbook.DocumentProperties.Comments = xls.xlsComments;  //备注
            workbook.DocumentProperties.Keywords = xls.xlsKeywords;   //标记
            workbook.DocumentProperties.CreatedTime = xls.xlsCreatedTime; //创建时间
            if (!string.IsNullOrEmpty(pwd))
            {
                workbook.Protect(pwd);//设置保护加密的 密码 :pwd
            }

            //创建Excel sheet的保护机制
            //Worksheet sheet = workbook.Worksheets[0];
            //sheet.Protect("test", SheetProtectionType.All);
            //保护结束

            //将Excel文件保存到指定文件,还可以指定Excel版本
            workbook.SaveToFile(Pth, ExcelVersion.Version2010);
        }

        #endregion

        #region 消除加密的Excel密码
        /// <summary>
        ///
        /// </summary>
        public void UnProtect()
        {
            workbook.UnProtect();
        }

        /// <summary>
        /// 消除加密的Excel
        /// </summary>
        /// <param name="pwd"></param>
        public void UnProtectWorkbook(string pwd)
        {
            workbook.UnProtectWorkbook(pwd);
        }
        #endregion

        #region 加载Excel文件
        /// <summary>
        /// 加载已存在的Excel文件 不能加载受密码保护的文件
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <param name="version"></param>
        public void LoadFromFile(string fileName, ExcelVersion version = ExcelVersion.Version2010)
        {
            workbook.LoadFromFile(config.configManager.getConfig("path.xls") + fileName, version);
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName">加载有密码保护的Excel文档</param>
        /// <param name="separator">密码</param>
        public void LoadFromFile(string fileName, string separator)
        {
            workbook.LoadFromFile(config.configManager.getConfig("path.xls") + fileName, separator);
        }
        #endregion

        #region 释放资源
        /// <summary>
        /// 释放资源
        /// </summary>
        public void Dispose()
        {
            workbook.Dispose();
        }
        #endregion

    }

    public class XlsInfo
    {
        public string xlsFileName { get; set; }//xls名称 如:2011.xlsx office版本 2010 即:ExcelVersion.Version2010
        public string xlsAuthor { get; set; }//Excel文件属性 Excel文件的作者 右键 详情展示
        public string xlsSubject { get; set; }//Excel文件属性 Excel文件的主题 右键 详情展示
        public string xlsTitle { get; set; }//Excel文件属性 Excel文件的标题 右键 详情展示
        public string xlsCompany { get; set; }//Excel文件属性 Excel文件的单位 右键 详情展示
        public string xlsComments { get; set; }//Excel文件属性 Excel文件的备注 右键 详情展示
        public string xlsKeywords { get; set; }//Excel文件属性 Excel文件的标记 右键 详情展示
        public DateTime xlsCreatedTime { get; set; }//Excel文件属性 Excel文件的创建时间 右键 详情展示

        /// <summary>
        /// 初始化xls文件路径 属性
        /// </summary>
        /// <param name="dic"></param>
        public XlsInfo(Dictionary<string,string> dic)
        {
            LoadConfig config = new LoadConfig();
            if (dic.Keys.Contains("xlsFileName"))
            {
                xlsFileName = config.configManager.getConfig("path.xls") + dic["xlsFileName"];// 2011.xlsx 此处版本为office 2010
            }
            //
            if (dic.Keys.Contains("xlsAuthor"))
            {
                xlsAuthor = dic["xlsAuthor"];
            }
            //
            if (dic.Keys.Contains("xlsSubject"))
            {
                xlsSubject = dic["xlsSubject"];
            }
            //
            if (dic.Keys.Contains("xlsTitle"))
            {
                xlsTitle = dic["xlsTitle"];
            }
            //
            if (dic.Keys.Contains("xlsCompany"))
            {
                xlsCompany = dic["xlsCompany"];
            }
            //
            if (dic.Keys.Contains("xlsComments"))
            {
                xlsComments = dic["xlsComments"];
            }
            //
            if (dic.Keys.Contains("xlsKeywords"))
            {
                xlsKeywords = dic["xlsKeywords"];
            }
            //
            if (dic.Keys.Contains("xlsCreatedTime"))
            {
                try
                {
                    xlsCreatedTime = Convert.ToDateTime(dic["xlsCreatedTime"]);
                }
                catch
                {
                    xlsCreatedTime = DateTime.Now;
                }
            }
            if (dic.Keys.Contains("FileName"))
            {
                xlsFileName = dic["xlsFileName"];
            }
        }
    }
}

下一个:

namespace CommonCS
{
    public class FlexPaperConfig
    {
        private XmlDocument _doc;
        private XmlNode _rootNode;

        public FlexPaperConfig(String mapPath)
        {
            _doc = new XmlDocument();
            _doc.Load(mapPath + @"FlexPaper.config");
            _rootNode = _doc.DocumentElement;
        }

        public void setConfig(String key, String value)
        {
            if (value == null || (value != null && value.Length == 0)) { return; }

            if (_rootNode.SelectSingleNode(key) == null || (_rootNode.SelectSingleNode(key) != null && _rootNode.SelectSingleNode(key).ChildNodes.Count == 0))
            {
                XmlElement newNode = _doc.CreateElement(key);
                newNode.InnerText = value;
                _rootNode.AppendChild(newNode);
            }
            else
            {
                _rootNode.SelectSingleNode(key).ChildNodes[0].InnerText = value;
            }
        }

        public String getConfig(String key)
        {
            if (_rootNode.SelectSingleNode(key) != null)
                if (_rootNode.SelectSingleNode(key).ChildNodes.Count > 0)
                    return _rootNode.SelectSingleNode(key).ChildNodes[0].Value;
                else
                    return "";
            else
                return null;
        }

        public Boolean SaveConfig(String mapPath)
        {
            try
            {
                _doc.Save(mapPath + @"FlexPaper.config");
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

下一个:

namespace CommonCS
{
    public class LoadConfig
    {
        public FlexPaperConfig configManager;
        public LoadConfig()
        {
            string mapPath = HttpContext.Current.Server.MapPath(VirtualPathUtility.GetDirectory("~"));

            this.configManager = new FlexPaperConfig(mapPath);
        }
    }
}

最后,贴出咱们简单的配置文件,这个配置文件的作用主要是配置文件保存路径,在本程序中,文件保存不会保存在项目中,而是存放在 D:\FlexPaper\Xls\ 因此,执行本程序你需要根据配置文件配置的路径,在D盘创建对应的文件夹:

配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<config>
  <!-- General Settings -->
  <allowcache>true</allowcache>
  <splitmode>true</splitmode>
  <path.pdf>D:\FlexPaper\PDF\</path.pdf>
  <path.doc>D:\FlexPaper\Doc\</path.doc>
  <path.xls>D:\FlexPaper\Xls\</path.xls>
  <path.swf>D:\FlexPaper\Working\</path.swf>
</config>

程序调用案例:

 public void HelloExcel()
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("xlsFileName", DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".xlsx");
            dic.Add("xlsAuthor", "Jack.Chen");
            dic.Add("xlsSubject", "主题");
            dic.Add("xlsTitle", "标题");
            dic.Add("xlsCompany", "河南城建学院计算机系");
            dic.Add("xlsComments", "备注");
            dic.Add("xlsKeywords", "标记");
            dic.Add("xlsCreatedTime", DateTime.Now.ToString());
            XlsInfo xls = new XlsInfo(dic);
            SpireInfo SpireModel = new SpireInfo();
            SpireModel.SavaXls(xls);
            SpireModel.Dispose();
        }

这样就在D盘相应的文件夹中创建了一个Excel文件:

我们右键这个Excel,然后查看他的属性:

这样我们就成功创建一个Excel文件,至于Excel文件的加密,加载,解密等,请参照本篇代码注释,在此不作说明,代码中已经实现,大家自我测试。

至此,本节的内容就结束了!

参考文献:http://www.cnblogs.com/landeanfen/p/5888973.html

参考文献:http://www.cnblogs.com/asxinyu/p/4346907.html

 @陈卧龙的博客

时间: 2024-08-05 11:12:58

Excel处理神器Spire.XLS,我的第一节封装的相关文章

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

阅读目录 一.组件介绍 二.组件安装使用 1.官方下载安装 2.Nuget安装 三.组件功能介绍 1.Excel转PDF 2.Excel生成图表 3.其他功能介绍 四.总结 正文 前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点是NPOI搞不定的: 导入Excel后,需要切割Excel的Sheet页,然后每个Sheet页单独生成一个PDF文件.

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

前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点是NPOI搞不定的: 导入Excel后,需要切割Excel的Sheet页,然后每个Sheet页单独生成一个PDF文件. 导出Excel的时候,项目里面需要将一些数据表格以图表的形式在Excel里面展示. 找了一圈资料,对于Excel生成pdf,网上的答案千篇一律:使用COM组件的方式,通过调用服务器

Spire.XLS

又一款Excel处理神器Spire.XLS,你值得拥有(二) 前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我们项目中的一些实际问题,这两天继续研究了下这个组件,觉得有些功能用起来还是挺方便的,这篇继续来看看Spire.XLS的一些其他功能,说不定有你需要的呢~~ 本文原创地址:http://www.cnblogs.com/landeanfen/p/5906077.html 一.基础入门 1.新建Workboo

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

在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装Excel,对于服务器,有时候还需要为配置IIS权限.折腾人,看到很多人在群里面使用这个东西,出现各种抓狂的错误: 2.开源.NET组件NPOI方式:这个方式应该是很多人都在使用的,这个开源的组件相比第一种,虽然稍微简单了点(2003支持比较好,新版本也支持Xlsx),但还是非常好用的:最近在浏览NP

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

原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装Excel,对于服务器,有时候还需要为配置IIS权限.折腾人,看到很多人在群里面使用这个东西,出现各种抓狂的错误: 2.开源.NET组件NPOI方式:这个方式应该是很多人都在使用的,这个开源的组件相比第一种,虽然稍微简单了点

数据从Excel数据导入到数据库的excel操作控件Spire.XLS for .NET

Spire.XLS for .NET控件是e-iceblue公司开发的一款支持对所有Excel格式类型文件进行操作的.NET 控件.它适用于任何类型的应用程序比如ASP.NET Web应用程序或者Windows桌面应用程序.Spire.XLS for .NET允许软件开发人员创建和管理Excel,而不需要安装Microsoft Excel或者Microsoft Office Excel.Spire.XLS for .NET和微软公司无隶属关系,也没有授权,赞助关系.相比Microsoft,Spi

利用免费的Spire.XLS控件制作Excel报表

我们小组上个季度接手了一个项目其中需要实现创建excel文档的功能,寻找实现这个功能的控件的任务分配给了我,通过百度搜索我找到了一个免费的控件,它是由E-iceblue公司推出的spire.xls控件,接下来的一段时间我尝试地创建了多个应用程序来测试它所有的功能,说实话,这个控件功能很强大,它几乎包含了Microsoft Excel的所有功能,而且使用它不需要安装Microsoft的Office,另外里面的方法属性的命名基本上是和MS Excel中的功能相对应的,不清楚的功能可参考MS Exce

Excel转图片(Free Spire.XLS for Java)

背景: 有Excel转图片的需求. 解决: 使用Free Spire.XLS for Java文档处理组件. 官网:https://www.e-iceblue.com jar包下载地址:http://repo.e-iceblue.com/nexus/content/groups/public/e-iceblue/spire.xls.free/2.2.0/spire.xls.free-2.2.0.jar Maven配置参考:https://www.e-iceblue.com/Tutorials/L

【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制

              本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章目录:http://www.cnblogs.com/asxinyu/p/4374032.html Spire.Office for .NET是E-iceblue开发的一种企业级.NET Office编辑的软件集合,包括Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCo