不安装Office操作Excel文件(.xlsx)
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)相关推荐
- 详解Python操作Excel文件
前言 本篇文章主要总结了一下利用python操作Excel文件的第三方库和方法. 常见库简介 1.xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. 地 ...
- hssfwork 导出excel 文件已损坏_C# NPOI 操作EXCEL文件的读取和导出
在实际项目中有很多场景遇到需要操作EXCEL文件,而常用到的库就有NPOI:NPOI是开源的POI 项目的.NET版,POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目, ...
- openpythonxl_Python操作Excel文件(3):优雅干将openxlpy
本文共4000余字,预计阅读时间16分钟,本文知乎连接:Python操作Excel文件(3):优雅干将openpyxl,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwi ...
- C#操作Excel文件(转)
摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...
- java excel导出2007_java操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- csv文件怎么转成excel_Python操作Excel文件(1):花式大师pyexcel
本文共2900余字,预计阅读时间12分钟,本文知乎连接:Python操作Excel文件(1):花式大师pyexcel,本文同步发布于silaoA的博客和微信公众号平台. 关注学习了解更多的Cygwin ...
- Python+pywin32操作Excel文件常用功能(268行代码+注释)
全国高校教师Python课程高级研修班(线上,11月20-21日) 中国大学MOOC"Python程序设计基础"第5次开课 推荐图书: <Python程序设计(第3版)> ...
- C#使用oledb操作excel文件的方法
本文实例讲述了C#使用oledb操作excel文件的方法.分享给大家供大家参考.具体分析如下: 不管什么编程语言都会提供操作Excel文件的方式,C#操作Excel主要有以下几种方式: 1.Excel ...
- 一小时教你轻松学会使用Java 整合 Easy Excel 操作 Excel 文件
文章目录 一.Apache POI简介 二.POI操作Excel 构建maven项目导入依赖 使用POI实现基本写操作 使用POI实现大数据量写操作 使用POI实现基本读操作 使用POI读取不同类型的 ...
最新文章
- git 避免重复输入用户名密码问题解决
- Struts2输入校验
- oracle中substrb用法,oracle中substr和instr的用法
- JAVA 计算地球上任意两点(经纬度)距离
- 数字电路中的建立时间与保持时间
- MYSQL中的空格及大小写问题
- Java基础学习总结(83)——Java泛型总结
- 获取公网ip,获取用户城市地址
- c++在数组中添加元素_39. 数组中数值和下标相等的元素
- poj 1269 题解
- .NET 应用从 Visual Studio 迁移到 Eclipse
- java 数学基础_Java中的基础数学
- 揭秘全球第二大基金公司:先锋基金70人投资团队掌管2万亿美元股票资产
- 西门子cnc sinumerik_2020邯郸cnc加工中心编程要多久就是工厂傅
- 动态随机存储器的刷新
- 为什么要推销自己_推销自己:为什么? 如何!
- Unity图片闪烁效果
- PS人物换装--白色换纯色
- 元旦节快乐,新的一年新的福利,给大家准备了高清无码的白虎图
- 【Linux】SWAP 深度解读(必须收藏)
热门文章
- Keras实现两个优化器:Lookahead和LazyOptimizer
- 雷柏V500s和V500的win键无效
- 《禅与摩托车维修艺术》(罗伯特·M·波西格)骑行路上的哲学思考 Zen and the Art of Motorcycle Mt...
- webm转mp4 python实现
- im即时通讯开发如何理解定位技术
- 如何在vmlogin中设置易路代理yiluproxy?
- layui 使用文档总结
- 用户态网络协议栈-OFP-网络框架分享
- paddle 41 在paddledetection添加RotateScaleCopyPaste数据增强方法
- 内蒙古大学计算机学院教授,内蒙古大学计算机学院软件学院硕士生导师:张俊星...