您的位置:首页 > 其它

不安装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等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐