不安装Office操作Excel文件(.xlsx)
2014-08-05 17:13
309 查看
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)。以前做过的好几个项目中,都需要对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等。
相关文章推荐
- GemBox.ExcelLite破解版,可以在没有安装Office的情况,使用.net代码操作Excel文件
- Excel操作基本方法 - 服务器端不用安装Office工具
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容
- 每次打开 Office 的 Word、Excel……时 都会显示安装程序正在准备必要的文件的解决办法
- 每次打开 Office 的 Word、Excel……时 都会显示安装程序正在准备必要的文件的解决办法
- java操作office和pdf文件:读取word,excel和pdf文档内容
- java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.
- java操作office和pdf文件页面列表导出cvs,excel、pdf报表.
- 如何在没有安装微软Excel环境下操作Excel文件?
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- XCLNetFileReplace(文件名文件内容批量替换工具),支持Word/Excel/文本文件(无需安装office)
- excel 2003 ,wps office 2007,excel 2007 xls xlsx文件操作效率比较
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.
- java操作office和pdf文件页面列表导出cvs,excel、pdf报表.
- 在没安装OFFICE的服务器SSIS中进行EXCEL的ETL操作!
- Python中操作Excel 2000的xlsx文件(使用openpyxl)
- .xlsx文件总是默认用2007 Microsoft Office component 打开,且无法更改用EXCEL打开的解决方法