using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
namespace QMAPP.MESReport.Web.Common
{
///
/// Excel操作工具
/// 创建者:单雨春
/// 创建日期:2014年9月26日
///
public partial class ExcelOperationHelper
{
#region 获得临时路径
///
/// 获得临时路径
///
///
public static string GetTempPath()
{
//应用程序物理路径
var PhysicsRootPath = System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath);
//临时文件路径
var TempPath = PhysicsRootPath + "Temp\\";
if (System.IO.Directory.Exists(PhysicsRootPath + "Temp") == false)
{
System.IO.Directory.CreateDirectory(PhysicsRootPath + "Temp");
}
return TempPath;
}
#endregion
#region 将数据生成为excel文件
///
/// 将数据生成为excel文件
/// 配置信息
/// 文件名
///
public void WriteWorkbook(List listSheetName, string fileName, DataSet ds)
{
List listSheet = new List() ;
//ISheet sheet = null;
XSSFWorkbook workbook1 = null;
HSSFWorkbook workbook2 = null;
try
{
if (fileName.IndexOf(".xlsx") > 0)
{
workbook1 = new XSSFWorkbook();
foreach (var item in listSheetName)
{
listSheet.Add(workbook1.CreateSheet(item));
}
}
else
{
workbook2 = new HSSFWorkbook();
foreach (var item in listSheetName)
{
listSheet.Add(workbook2.CreateSheet(item));
}
}
//写入文件
using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
IRow dataRow = null;
ICell contentCell = null;
int rowsNum = 0;
for (int m = 0; m < ds.Tables.Count; m++)
{
rowsNum = 0;
if (ds.Tables[m].Rows.Count == 0)
{
continue;
}
ICellStyle headStyle = workbook1 == null ? workbook2.CreateCellStyle() : workbook1.CreateCellStyle();
IFont headFont = workbook1 == null ? workbook2.CreateFont() : workbook1.CreateFont();
ICellStyle cellStyle = workbook1 == null ? workbook2.CreateCellStyle() : workbook1.CreateCellStyle();
IFont cellFont = workbook1 == null ? workbook2.CreateFont() : workbook1.CreateFont();
#region 写入表头
IRow headRow = listSheet[m].CreateRow(rowsNum++);
for (int i = 0; i < ds.Tables[m].Columns.Count; i++)
{
ICell cell = headRow.CreateCell(i);
cell.SetCellValue(ds.Tables[m].Rows[0][i].ToString());
headStyle.BorderTop = BorderStyle.Thin;
headStyle.BorderBottom = BorderStyle.Thin;
headStyle.BorderLeft = BorderStyle.Thin;
headStyle.BorderRight = BorderStyle.Thin;
headFont.Boldweight = (short)FontBoldWeight.Bold;
headStyle.SetFont(headFont);
cell.CellStyle = headStyle;
}
#endregion
#region 写入行数据
for (int j = 1; j < ds.Tables[m].Rows.Count; j++)
{
dataRow = listSheet[m].CreateRow(rowsNum++);
for (int i = 0; i < ds.Tables[m].Columns.Count; i++)
{
CellType cellType = CellType.Blank;
contentCell = dataRow.CreateCell(i, cellType);
int a = 0;
if (int.TryParse(ds.Tables[m].Rows[j][i].ToString(), out a))
{
contentCell.SetCellValue(a);
}
else
{
contentCell.SetCellValue(ds.Tables[m].Rows[j][i].ToString());
}
cellStyle.BorderTop = BorderStyle.Thin;
cellStyle.BorderBottom = BorderStyle.Thin;
cellStyle.BorderLeft = BorderStyle.Thin;
cellStyle.BorderRight = BorderStyle.Thin;
cellStyle.SetFont(cellFont);
contentCell.CellStyle = cellStyle;
}
}
#endregion
rowsNum++;
}
if (fileName.IndexOf(".xlsx") > 0)
{
workbook1.Write(fs);
}
else
{
workbook2.Write(fs);
}
fs.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
///
/// 下载文件
///
///
///
public static void FileDownload(HttpResponseBase Response, string filePath, string fileName)
{
Response.ClearHeaders();
Response.Clear();
Response.Expires = 0;
Response.Buffer = true;
Response.AddHeader("Accept-Language", "zh-tw");
//string name = System.IO.Path.GetFileName(virtualPath + fileName);
System.IO.FileStream files = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] byteFile = null;
if (files.Length == 0)
{
byteFile = new byte[1];
}
else
{
byteFile = new byte[files.Length];
}
files.Read(byteFile, 0, (int)byteFile.Length);
files.Close();
fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.BinaryWrite(byteFile);
Response.End();
FileInfo file = new FileInfo(filePath);
file.Delete();
}
}
}