using System; using System.Collections.Generic; using System.Linq; using System.Web; using SuperMap.RealEstate.CoreFrameWork; using SuperMap.RealEstate.ServiceModel; using SuperMap.RealEstate.Utility; using SuperMap.RealEstate.Web.UI; using SuperMap.RealEstate.Web.UI.WebControls; using SuperMap.RealEstate.Web.Utility; using MSB = SuperMap.RealEstate.MainTenance.Storage.Business; using System.Data; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.SS.Util; using NPOI.POIFS; using NPOI.Util; using NPOI.HSSF.Util; using NPOI.XSSF.UserModel; using System.Configuration; using System.Web.Security; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls.WebParts; using System.IO; using System.Reflection; namespace SuperMap.RealEstate.MainTenance.Storage.Common { public class ExclHelper { #region 导出方法 private string fileName = null; //文件名 private IWorkbook workbook = null; private FileStream fs = null; private bool disposed; public int DataTableToExcel(string FileName, DataTable data, string sheetName, bool isColumnWritten) { int i = 0; int j = 0; int count = 0; ISheet sheet = null; if (fileName == null) { workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); //NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1"); } else { fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); if (fileName.IndexOf(".xlsx") > 0) // 2007版本 workbook = new XSSFWorkbook(); else if (fileName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(); } try { if (workbook != null) { sheet = workbook.CreateSheet(sheetName); } else { return -1; } if (isColumnWritten == true) //写入DataTable的列名 { IRow row = sheet.CreateRow(0); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); } count = 1; } else { count = 0; } for (i = 0; i < data.Rows.Count; ++i) { IRow row = sheet.CreateRow(count); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); } ++count; } // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); workbook.Write(ms); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.Charset = "utf-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文 HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + FileName + "_{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff"))); HttpContext.Current.Response.BinaryWrite(ms.ToArray()); HttpContext.Current.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 HttpContext.Current.Response.End(); workbook = null; ms.Close(); ms.Dispose(); return count; } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); return -1; } } public int DataTableToExcelForEhange(string FileName, DataTable data, string sheetName, bool isColumnWritten) { int i = 0; int j = 0; int count = 0; ISheet sheet = null; if (fileName == null) { workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); } else { fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); if (fileName.IndexOf(".xlsx") > 0) // 2007版本 workbook = new XSSFWorkbook(); else if (fileName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(); } try { if (workbook != null) { sheet = workbook.CreateSheet(sheetName); } else { return -1; } if (isColumnWritten == true) //写入DataTable的列名 { IRow row = sheet.CreateRow(0); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); } count = 1; } else { count = 0; } for (i = 0; i < data.Rows.Count; ++i) { IRow row = sheet.CreateRow(count); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); } ++count; } // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); workbook.Write(ms); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.Charset = "utf-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文 HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName); HttpContext.Current.Response.BinaryWrite(ms.ToArray()); HttpContext.Current.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 HttpContext.Current.Response.End(); workbook = null; ms.Close(); ms.Dispose(); return count; } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); return -1; } } public static DataTable ExcelImport(string filePath) { NPOI.SS.UserModel.IWorkbook book = null; HSSFWorkbook hssfworkbook; #region //初始化信息 try { using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { try { book = new NPOI.XSSF.UserModel.XSSFWorkbook(file); } catch (Exception ex) { book = new HSSFWorkbook(file); } } } catch (Exception e) { throw e; } #endregion NPOI.SS.UserModel.ISheet sheet = book.GetSheetAt(0); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); DataTable dt = new DataTable(); for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++) { dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString()); } while (rows.MoveNext()) { Type _Type = rows.Current.GetType(); IRow row = (IRow)rows.Current; //HSSFRow row = (HSSFRow) DataRow dr = dt.NewRow(); for (int i = 0; i < row.LastCellNum; i++) { NPOI.SS.UserModel.ICell cell = row.GetCell(i); if (cell == null) { dr[i] = null; } else { dr[i] = cell.ToString(); } } dt.Rows.Add(dr); } return dt; } public int DataTableToExcels(string FileName, DataTable data, string sheetName, bool isColumnWritten, bool isDetail) { int i = 0; int j = 0; int count = 0; ISheet sheet = null; if (fileName == null) { workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); //NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1"); } else { fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); if (fileName.IndexOf(".xlsx") > 0) // 2007版本 workbook = new XSSFWorkbook(); else if (fileName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(); } try { if (workbook != null) { sheet = workbook.CreateSheet(sheetName); } else { return -1; } if (isColumnWritten == true) //写入DataTable的列名 { IRow row = sheet.CreateRow(0); if (!isDetail) { row.CreateCell(0).SetCellValue("服务区"); row.CreateCell(1).SetCellValue("所属区域"); row.CreateCell(2).SetCellValue("项目名称"); row.CreateCell(3).SetCellValue("经营商户"); row.CreateCell(4).SetCellValue("应收账款余额"); row.CreateCell(5).SetCellValue("账期<一个月"); row.CreateCell(6).SetCellValue("一个月<账期<三个月"); row.CreateCell(7).SetCellValue("三个月<账期"); row.CreateCell(8).SetCellValue("其他应收款余额"); row.CreateCell(9).SetCellValue("账期<一个月"); row.CreateCell(10).SetCellValue("一个月<账期<三个月"); row.CreateCell(11).SetCellValue("三个月<账期"); row.CreateCell(12).SetCellValue("逾期金额合计"); row.CreateCell(13).SetCellValue("逾期原因分析"); row.CreateCell(14).SetCellValue("备注"); } else { row.CreateCell(0).SetCellValue("所属区域"); row.CreateCell(1).SetCellValue("服务区"); row.CreateCell(2).SetCellValue("应收账款合计"); row.CreateCell(3).SetCellValue("正常(账期<1个月)"); row.CreateCell(4).SetCellValue("异常(1个月<账期<3个月)"); row.CreateCell(5).SetCellValue("严重逾期(3个月<账期)"); row.CreateCell(6).SetCellValue("其他应收款余额"); row.CreateCell(7).SetCellValue("正常(账期<1个月)"); row.CreateCell(8).SetCellValue("异常(1个月<账期<3个月)"); row.CreateCell(9).SetCellValue("严重逾期(3个月<账期)"); } count = 1; } else { count = 0; } for (i = 0; i < data.Rows.Count; ++i) { IRow row = sheet.CreateRow(count); for (j = 0; j < data.Columns.Count; ++j) { row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); } ++count; } // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); workbook.Write(ms); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.Charset = "utf-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文 HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + FileName + "_{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff"))); HttpContext.Current.Response.BinaryWrite(ms.ToArray()); HttpContext.Current.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 HttpContext.Current.Response.End(); workbook = null; ms.Close(); ms.Dispose(); return count; } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); return -1; } } public void setCellStyleAlignmentCenter(HSSFCellStyle style) { style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; } public HSSFFont createFont(HSSFWorkbook hssfworkbook) { return (HSSFFont)hssfworkbook.CreateFont(); } public void setCellStyleBord(HSSFCellStyle style) { style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; } #endregion } }