using System.Data;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
namespace Admin.NET.Core.Helper.ExcelHelper
{
public class Excel
{
private HSSFWorkbook _workBook;
private ISheet _wbSheet = null;
private DataColumnCollection _columns = null;
private int _col = 0; //total columns
private int _row = 0; //total rows
//private int _sheet = 0; //total sheets
private int _sheetRowNum = 65536; //each sheet allow rows
public Excel()
{
InstanceWorkBook();
}
///
/// 实例方法
///
/// 表头
public Excel(DataColumnCollection columns)
{
_columns = columns;
InstanceWorkBook();
}
private void InstanceWorkBook()
{
_workBook = new HSSFWorkbook();
var dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "BaiyiTimes";
_workBook.DocumentSummaryInformation = dsi;
var si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "Etimes Secure Document System Log Backup";
_workBook.SummaryInformation = si;
}
private DataColumnCollection GetColumns(DataColumnCollection columns)
{
return columns == null || columns.Count == 0 ? _columns : columns;
}
private ISheet GetSheet(ISheet sheet)
{
return sheet == null ? _wbSheet : sheet;
}
private void CreateHeader(ISheet sheet, DataColumnCollection columns)
{
_columns = GetColumns(columns);
var oRow = sheet.CreateRow(0);
oRow.Height = 20 * 20;
foreach (DataColumn column in _columns)
{
var oCell = oRow.CreateCell(_col);
var style1 = _workBook.CreateCellStyle();
style1.Alignment = HorizontalAlignment.Center;
style1.VerticalAlignment = VerticalAlignment.Center;
var font = _workBook.CreateFont();
font.IsBold = true;
font.FontHeightInPoints = 11;
style1.SetFont(font);
oCell.CellStyle = style1;
var name = column.ColumnName;
oCell.SetCellValue(name.ToString());
sheet.SetColumnWidth(_col, 60 * 60);
_col++;
}
_row++;
}
public ISheet CreateSheet()
{
return CreateSheet(null, null);
}
public ISheet CreateSheet(DataColumnCollection columns, string name)
{
_wbSheet = _workBook.CreateSheet(name);
CreateHeader(_wbSheet, columns);
_col = 0; //total columns
_row = 1;
return _wbSheet;
}
public void SetRowValue(DataRowCollection rows, ISheet sheet)
{
_wbSheet = GetSheet(sheet);
foreach (DataRow row in rows)
{
SetRowValue(row);
}
}
public void SetRowValue(DataRow row)
{
var style1 = _workBook.CreateCellStyle();
style1.Alignment = HorizontalAlignment.Center;
style1.VerticalAlignment = VerticalAlignment.Center;
//if (_row % _sheetRowNum == 0)
//{
// CreateSheet();
//}
var oRow = _wbSheet.CreateRow(_row % _sheetRowNum);
var obj = string.Empty;
var cell = 0;
foreach (DataColumn column in _columns)
{
obj = row[column.ColumnName].ToString();
var cells = oRow.CreateCell(cell);
cells.CellStyle = style1;
cells.SetCellValue(obj);
cell++;
}
_row++;
}
public void SaveAs(string filePath)
{
if (File.Exists(filePath)) File.Delete(filePath);
var file = new FileStream(filePath, FileMode.Create);
_workBook.Write(file);
file.Close();
}
public MemoryStream SaveAsMemoryStream()
{
var ms = new MemoryStream();
_workBook.Write(ms);
return ms;
}
}
}