158 lines
5.9 KiB
C#
158 lines
5.9 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using NPOI.XSSF.UserModel;
|
||
using NPOI.SS.UserModel;
|
||
using NPOI.HSSF.UserModel;
|
||
using System.IO;
|
||
using System.Data;
|
||
using System.Web;
|
||
namespace Eson.Utils.ExcelHelper
|
||
{
|
||
public sealed class ExcelStream : IDisposable
|
||
{
|
||
public void Dispose()
|
||
{
|
||
workSheet = null;
|
||
workBook = null;
|
||
}
|
||
|
||
public IWorkbook workBook;
|
||
public ISheet workSheet;
|
||
|
||
public ExcelStream() : this(null, true)
|
||
{
|
||
|
||
}
|
||
|
||
public ExcelStream(string sheetname, bool is07Excel)
|
||
{
|
||
workBook = is07Excel ? (new XSSFWorkbook() as IWorkbook) : (new HSSFWorkbook() as IWorkbook);
|
||
if (!string.IsNullOrEmpty(sheetname))
|
||
workSheet = workBook.CreateSheet(sheetname);
|
||
else
|
||
workSheet = workBook.CreateSheet();
|
||
|
||
//_cellStyle = GetDefaultCellStyle();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 导出Excel,传入DataTable内存表
|
||
/// </summary>
|
||
/// <param name="dtbl">DataTabke内存表</param>
|
||
/// <param name="dicProperties">想要转换的属性名称列表[key值对应Model属性,value值对应Excel显示的列名]</param>
|
||
/// <param name="strSaveName">保存名称</param>
|
||
/// <param name="is07Excel">是否导出2007以上版本的Excel,默认是</param>
|
||
//public void WriteListDate(DataTable dtbl, Dictionary<string, string> dicProperties, string strSaveName, bool is07Excel = true)
|
||
//{
|
||
// #region 初始化工作簿
|
||
// //InitializeWorkbook(strSaveName, is07Excel);
|
||
|
||
// //初始化行
|
||
// int rowIndex = 0;
|
||
// int intColumn = 0;
|
||
// IRow rowExcel = workSheet.CreateRow(rowIndex);
|
||
// ICell cellExcel;
|
||
|
||
// //初始化列
|
||
// foreach (KeyValuePair<string, string> property in dicProperties)
|
||
// {
|
||
// cellExcel = rowExcel.CreateCell(intColumn);
|
||
// cellExcel.SetCellValue(property.Value);
|
||
// ++intColumn;
|
||
// }
|
||
// #endregion
|
||
|
||
// #region 写入内容
|
||
// foreach (DataRow rowInfo in dtbl.Rows)
|
||
// {
|
||
// ++rowIndex;
|
||
// rowExcel = workSheet.CreateRow(rowIndex);
|
||
// int intColumnContent = 0;
|
||
// foreach (KeyValuePair<string, string> property in dicProperties)
|
||
// {
|
||
// cellExcel = rowExcel.CreateCell(intColumnContent);
|
||
// cellExcel.SetCellValue(GetColumValue(dtbl, rowInfo, property.Key));
|
||
// ++intColumnContent;
|
||
// }
|
||
// }
|
||
// #endregion
|
||
|
||
// //内存流导出
|
||
// MemoryStream ms = new MemoryStream();
|
||
// ExportExcel(ms, strSaveName, is07Excel);
|
||
//}
|
||
|
||
/// <summary>
|
||
/// 通过提供的列名和具体行,返回DataTable中具体的某一列的值
|
||
/// </summary>
|
||
/// <param name="dtbl">内存表</param>
|
||
/// <param name="rowInfo">具体行</param>
|
||
/// <param name="columName">列名</param>
|
||
/// <returns>具体某列的值</returns>
|
||
public string GetColumValue(DataTable dtbl, DataRow rowInfo, string columName)
|
||
{
|
||
string clumValue = "";
|
||
foreach (DataColumn clum in dtbl.Columns)
|
||
{
|
||
if (clum.ColumnName.Equals(columName))
|
||
{
|
||
clumValue = rowInfo[clum].ToString();
|
||
break;
|
||
}
|
||
}
|
||
return clumValue;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 输出Excel文件
|
||
/// </summary>
|
||
/// <param name="ms">MemoryStream内存流</param>
|
||
/// <param name="strSaveName">文件保存名称</param>
|
||
/// <param name="is07Excel">是否导出2007以上版本的Excel</param>
|
||
//private void ExportExcel(MemoryStream ms, string strSaveName, bool is07Excel)
|
||
//{
|
||
// try
|
||
// {
|
||
// //MemoryStream ms1 = new MemoryStream();
|
||
// ////ms.Flush();
|
||
// ////ms.Position = 0;
|
||
// //workBook.Write(ms1);
|
||
|
||
// //string filename = UrlOper.GetToExcelName(strSaveName) + (is07Excel ? ".xlsx" : ".xls");
|
||
// //Stream stream = ms1;
|
||
// //FileDownload.ExportFile(stream, filename);
|
||
|
||
// ////ms.Close();
|
||
// //ms = null;
|
||
// //workBook = null;
|
||
|
||
// //ms.Flush();
|
||
// //ms.Position = 0;
|
||
// //workBook.Write(ms);
|
||
// //workBook = null;
|
||
// //HttpContext current = HttpContext.Current;
|
||
// //current.Response.ContentEncoding = System.Text.Encoding.UTF8;
|
||
// //current.Response.ContentType = "application/ms-excel";
|
||
// //current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + UrlOper.GetToExcelName(strSaveName) + (is07Excel ? ".xlsx" : ".xls"));
|
||
// //current.Response.BinaryWrite(ms.ToArray());
|
||
// //ms.Close();
|
||
// //ms = null;
|
||
// //current.Response.Flush();
|
||
// //current.Response.Close();
|
||
|
||
// HttpContext current = HttpContext.Current;
|
||
// current.Response.Clear();
|
||
// current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||
// current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", UrlOper.GetToExcelName(strSaveName) + ".xlsx"));
|
||
// //System.IO.MemoryStream ms = new System.IO.MemoryStream();
|
||
// workBook.Write(ms);
|
||
// current.Response.BinaryWrite(ms.ToArray());
|
||
|
||
// current.Response.Flush();
|
||
// current.Response.End();
|
||
// }
|
||
// catch (Exception ex) { }
|
||
//}
|
||
}
|
||
}
|