1.使用场景:

在不安装Office组件包的情况下,操作Excel文件(.xlsx)。以前做过的好几个项目中,都需要对Excel文件处理,特别是将统计成果按照一定的格式和样式输出到Excel中,或将固定格式的Excel数据导入到系统,这种需求非常常见,以前的做法主要是基于Office组件进行二次开发。但这种做法存在一定的缺陷,(1) 部署比较麻烦,所有的部署机上都必须安装Office。(2)好多新手在使用Office开发时,对自动生成的office组件包装类理解不深,导致在项目移植的过程中引起了很多的问题。

2.EPPlus库的使用:

EPPlus是一个能不依赖于Office而独立读写操作Excel2007/2010的.net类库,主要是操作Excel的xlsx文件。

官方下载地址:http://epplus.codeplex.com/

EPPlus提供的功能包括:

Cell Ranges 单元格范围

Cell Styling   单元格样式,包括:边框、颜色、填充、字体、显示格式(Number)、靠边。

Charts   统计图表

Picture  图片

Shapes

Comments

Tables  表格

Protection  协议

Encryption  加密

Pivot Tables透视表

Conditional Formatting、VBA、Enumeration Of Cell  支持Linq。等。

2.应用实例

注意:在使用之前必须添加两个引用,这两个命名空间都在EPPlus.dll库中。

using OfficeOpenXml;
 using OfficeOpenXml.Style;

(1)【写】这是项目中用到的创建一个.xlsx文件,并将统计结果到处到此.xlsx文件中。

/// <summary>
        /// 统计信息输出到excel文件中,创建本地缓存。
        /// </summary>
        /// <param name="singleDataTable">单程</param>
        /// <param name="doubleTable">往返</param>
        /// <returns>ture,false</returns>
        private bool ExportToExcel(DataTable singleDataTable, DataTable doubleTable)
        {
            ExcelPackage excelPackage = new ExcelPackage();
            #region 单程
            ExcelWorksheet single_Sheet = excelPackage.Workbook.Worksheets.Add("single_Sheet");
            single_Sheet.Name = "单程航班";
            single_Sheet.Cells.Style.Font.Size = 9;
            single_Sheet.Cells.Style.Font.Name = "微软雅黑";
            single_Sheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;

int columsCount = singleDataTable.Columns.Count;
            int rowIndex = 0;

++rowIndex; //在worksheet中添加新行
            for (int i = 0; i < columsCount; i++)
            {
                single_Sheet.Cells[rowIndex, i + 1].Value = singleDataTable.Columns[i].ColumnName;
                single_Sheet.Cells[rowIndex, i + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                single_Sheet.Cells[rowIndex, i + 1].Style.Font.Bold = true;
            }
            ++rowIndex;//excel第一行用来存储表格头,从第二行开始存储数据。
            for (int i = 0; i < singleDataTable.Rows.Count; i++)
            {
                for (int j = 0; j < columsCount; j++)
                {
                    single_Sheet.Cells[rowIndex + i, j + 1].Value = singleDataTable.Rows[i][j].ToString();
                }
            }
            #endregion
            #region 往返
            ExcelWorksheet double_Sheet = excelPackage.Workbook.Worksheets.Add("double_Sheet");
            double_Sheet.Name = "往返航班";
            double_Sheet.Cells.Style.Font.Size = 9;
            double_Sheet.Cells.Style.Font.Name = "微软雅黑";
            double_Sheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
            rowIndex = 0;
            ++rowIndex; //在worksheet中添加新行
            for (int i = 0; i < columsCount; i++)
            {
                double_Sheet.Cells[rowIndex, i + 1].Value = doubleTable.Columns[i].ColumnName;
                double_Sheet.Cells[rowIndex, i + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                double_Sheet.Cells[rowIndex, i + 1].Style.Font.Bold = true;
            }
            ++rowIndex;
            for (int i = 0; i < doubleTable.Rows.Count; i++)
            {
                for (int j = 0; j < columsCount; j++)
                {
                    double_Sheet.Cells[rowIndex + i, j + 1].Value = doubleTable.Rows[i][j].ToString();
                }
            }
            #endregion
            #region 输出到执行目录
            try
            {
                this.cacheFileName = string.Format("航线查询明细日报v{0}.xlsx", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                if (Directory.Exists(cacheDirectory) == false)
                {
                    Directory.CreateDirectory(cacheDirectory);
                }
                string fullpath = cacheDirectory + this.cacheFileName;
                FileStream fileStream = new FileStream(fullpath, FileMode.Create);
                using (fileStream)
                {
                    byte[] fileBytes = excelPackage.GetAsByteArray();
                    fileStream.Write(fileBytes, 0, fileBytes.Length);
                    fileStream.Close();
                }
            }
            catch
            {
                return false;
            }
            return true;
            #endregion

}

(2) 【读】读取.xslx的文件。

/// <summary>
        /// 将统计结果发送到指定邮箱。
        /// </summary>
        /// <returns></returns>
        private bool SendEmail()
        {
            ExcelPackage excelPackage = new ExcelPackage(new FileInfo(this.cacheDirectory + this.cacheFileName));
            string mailMessagaBodyToHtml = ConvertExcelToHtml(excelPackage.Workbook.Worksheets);
            string smtpClientHost=@"mail.ly.com";
            string networkCredentialName="my08567";
            string networkCredentialPassword= @"123qwe!@#";
            string fromMailAddress="my08567@ly.com";
            string toMailAddress="mymhj@live.com;my08567@live.com;yyy07386@ly.com";
            string duplicateMailAddress="mwm07215@ly.com;mymhj@live.com";
            string subject="航线查询日报表";
            string body=ConvertExcelToHtml(excelPackage.Workbook.Worksheets);
            bool isHtml=true;
            MemoryStream attachmentSteam= new MemoryStream(excelPackage.GetAsByteArray());;
            string attachmentFileName = DateTime.Today.ToString("yyyyMMdd") + "航线查询明细日报.xlsx";      
            try
            {
                SendEmailHelper.SendEMailNet(smtpClientHost, networkCredentialName, networkCredentialPassword, fromMailAddress,
                    toMailAddress, duplicateMailAddress, subject, body, isHtml, attachmentSteam, attachmentFileName);
                return true;
            }
            catch
            {
                return false;
            }
        }

在网上搜集的过程中,还发现对Excel文件格式的操作,还有一下几个开源组件可以使用ExcelLibrary,NPOI等。

不安装Office操作Excel文件(.xlsx)相关推荐

  1. 详解Python操作Excel文件

    前言 本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法. 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. 地 ...

  2. hssfwork 导出excel 文件已损坏_C# NPOI 操作EXCEL文件的读取和导出

    在实际项目中有很多场景遇到需要操作EXCEL文件,而常用到的库就有NPOI:NPOI是开源的POI 项目的.NET版,POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目, ...

  3. openpythonxl_Python操作Excel文件(3):优雅干将openxlpy

    本文共4000余字,预计阅读时间16分钟,本文知乎连接:Python操作Excel文件(3):优雅干将openpyxl,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwi ...

  4. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  5. java excel导出2007_java操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  6. csv文件怎么转成excel_Python操作Excel文件(1):花式大师pyexcel

    本文共2900余字,预计阅读时间12分钟,本文知乎连接:Python操作Excel文件(1):花式大师pyexcel,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwin ...

  7. Python+pywin32操作Excel文件常用功能(268行代码+注释)

    全国高校教师Python课程高级研修班(线上,11月20-21日) 中国大学MOOC"Python程序设计基础"第5次开课 推荐图书: <Python程序设计(第3版)> ...

  8. C#使用oledb操作excel文件的方法

    本文实例讲述了C#使用oledb操作excel文件的方法.分享给大家供大家参考.具体分析如下: 不管什么编程语言都会提供操作Excel文件的方式,C#操作Excel主要有以下几种方式: 1.Excel ...

  9. 一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件

    文章目录 一.Apache POI简介 二.POI操作Excel 构建maven项目导入依赖 使用POI实现基本写操作 使用POI实现大数据量写操作 使用POI实现基本读操作 使用POI读取不同类型的 ...

最新文章

  1. git 避免重复输入用户名密码问题解决
  2. Struts2输入校验
  3. oracle中substrb用法,oracle中substr和instr的用法
  4. JAVA 计算地球上任意两点(经纬度)距离
  5. 数字电路中的建立时间与保持时间
  6. MYSQL中的空格及大小写问题
  7. Java基础学习总结(83)——Java泛型总结
  8. 获取公网ip,获取用户城市地址
  9. c++在数组中添加元素_39. 数组中数值和下标相等的元素
  10. poj 1269 题解
  11. .NET 应用从 Visual Studio 迁移到 Eclipse
  12. java 数学基础_Java中的基础数学
  13. 揭秘全球第二大基金公司:先锋基金70人投资团队掌管2万亿美元股票资产
  14. 西门子cnc sinumerik_2020邯郸cnc加工中心编程要多久就是工厂傅
  15. 动态随机存储器的刷新
  16. 为什么要推销自己_推销自己:为什么? 如何!
  17. Unity图片闪烁效果
  18. PS人物换装--白色换纯色
  19. 元旦节快乐,新的一年新的福利,给大家准备了高清无码的白虎图
  20. 【Linux】SWAP 深度解读(必须收藏)

热门文章

  1. Keras实现两个优化器:Lookahead和LazyOptimizer
  2. 雷柏V500s和V500的win键无效
  3. 《禅与摩托车维修艺术》(罗伯特·M·波西格)骑行路上的哲学思考 Zen and the Art of Motorcycle Mt...
  4. webm转mp4 python实现
  5. im即时通讯开发如何理解定位技术
  6. 如何在vmlogin中设置易路代理yiluproxy?
  7. layui 使用文档总结
  8. 用户态网络协议栈-OFP-网络框架分享
  9. paddle 41 在paddledetection添加RotateScaleCopyPaste数据增强方法
  10. 内蒙古大学计算机学院教授,内蒙古大学计算机学院软件学院硕士生导师:张俊星...