EPPlus 是一個使用 Open Office Xml 格式(xlsx)讀取和寫入 Excel 2007/2010 文件的 .net 庫,並且免費開源。
下載地址:http://epplus.codeplex.com/
先創建一個 Excel 工作簿寫入數據之後,可以選擇保存至指定文件(新建文件)、保存爲流、獲取字節數組輸出到瀏覽器下載。
[Data]
[HttpPost]
public JsonResult ExportBankTemplate(List<BILLAPPROVEFIModel> SelectItemList)
{
var result = new ResponseContext<BaseDto>();
List<ExportBankTemplateModel> list = new List<ExportBankTemplateModel>();
foreach (object obj in SelectItemList)
{
BILLAPPROVEFIModel model = obj as BILLAPPROVEFIModel;
ExportBankTemplateModel exportBankTemplateModel = new ExportBankTemplateModel();
string BackCard = this._iCOMMONEMPLOYEER.GetEmployeeByUserID(model.EmployeeCD);
try
{
BackCard = this._iCOMMONEMPLOYEER.GetEmployeeByUserID(model.EmployeeCD);
}
catch (Exception ex)
{
}
exportBankTemplateModel.UserName = model.EmployeeName;
exportBankTemplateModel.TotalAmount = model.TotalAmount;
exportBankTemplateModel.BankCardNumber = BackCard;
list.Add(exportBankTemplateModel);
}
ExcelPackage package = new ExcelPackage();
// 添加一個 sheet 表
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("代發登記表");
int rowIndex = 1; // 起始行
int colIndex = 0; // 起始列
//設置列名
//worksheet.Cells[rowIndex, colIndex + 1].Value = "銀行賬號";
//worksheet.Cells[rowIndex, colIndex + 2].Value = "姓名";
//worksheet.Cells[rowIndex, colIndex + 3].Value = "金額";
//自動調整列寬,也可以指定最小寬度和最大寬度
//worksheet.Column(colIndex + 1).AutoFit();
//worksheet.Column(colIndex + 2).AutoFit();
//worksheet.Column(colIndex + 3).AutoFit();
// 跳過第一列列名
//rowIndex++;
//寫入數據
for (int i = 0; i < list.Count; i++)
{
worksheet.Cells[rowIndex + i, colIndex + 1].Value = list[i].BankCardNumber.ToString();
worksheet.Cells[rowIndex + i, colIndex + 2].Value = list[i].UserName.ToString();
worksheet.Cells[rowIndex + i, colIndex + 3].Value = list[i].TotalAmount.ToString();
//自動調整行高
worksheet.Row(rowIndex + i).CustomHeight = true;
worksheet.Column(colIndex + 1).AutoFit();
worksheet.Column(colIndex + 2).AutoFit();
worksheet.Column(colIndex + 3).AutoFit();
}
#region 樣式
//設置字體,也可以是中文,比如:宋體
worksheet.Cells.Style.Font.Name = "Arial";
//字體大小
worksheet.Cells.Style.Font.Size = 12;
//垂直居中
worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
//水平居中
worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
//單元格是否自動換行
worksheet.Cells.Style.WrapText = false;
//設置單元格格式爲文本
worksheet.Cells.Style.Numberformat.Format = "@";
//單元格自動適應大小
worksheet.Cells.Style.ShrinkToFit = true;
#endregion
try
{
//第二種保存方式
string path2 = @"D:\wwwroot\";
string filePath2 = path2 + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";
FileStream fileStream2 = new FileStream(filePath2, FileMode.Create);
//寫入文件流
package.SaveAs(fileStream2);
////也可以直接獲取字節數組
//byte[] bytes = package.GetAsByteArray();
////調用下面的方法輸出到瀏覽器下載
//OutputClient(bytes);
package.Dispose();
}
catch (Exception ex)
{
result.Head.Msg = ex.Message;
}
result.Head.Msg = "導出成功";
return Json(result, JsonRequestBehavior.AllowGet);
}
public void OutputClient(byte[] bytes)
{
HttpResponse response =System.Web.HttpContext.Current.Response;
response.Buffer = true;
response.Clear();
response.ClearHeaders();
response.ClearContent();
//response.ContentType = "application/ms-excel";
response.ContentType = "application/vnd.openxmlformats - officedocument.spreadsheetml.sheet";
response.AppendHeader("Content-Type", "text/html; charset=GB2312");
response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")));
response.Charset = "GB2312";
response.ContentEncoding = Encoding.GetEncoding("GB2312");
response.BinaryWrite(bytes);
response.Redirect("www.baidu.com");
response.Flush();
response.End();
}