using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Text;
namespace BLL.Common
{
public class NPOIExcel
{
internal IWorkbook Book { get; set; }
private int sheetID = 0;
///
/// 当前活动的SheetID,所有的操作将指向这个Sheet
///
public int ActiveSheetID
{
get
{
return sheetID;
}
set
{
sheetID = value;
}
}
///
/// 当前活动的SheetName,所有的操作将指向这个Sheet
///
public String ActiveSheetName
{
get
{
return Book.GetSheetAt(sheetID).SheetName;
}
set
{
sheetID = Book.GetSheetIndex(value);
}
}
///
/// 当前活动的Sheet,所有的操作将指向这个Sheet
///
public ISheet ActiveSheet
{
get
{
return Book.GetSheetAt(sheetID);
}
}
///
/// 第一行非空行的行号
///
public int FirstRowNum
{
get
{
return Book.GetSheetAt(sheetID).FirstRowNum;
}
}
///
/// 最后一行非空行的行号
///
public int LastRostNum
{
get
{
return Book.GetSheetAt(sheetID).LastRowNum;
}
}
///
/// 无模板的Excel生成或操作
///
public NPOIExcel()
{
Book = new HSSFWorkbook();
Book.CreateSheet();
}
public NPOIExcel(Stream fileStream, String fileName)
{
if (fileName.Substring(fileName.LastIndexOf(".")) == ".xls")
{
Book = new HSSFWorkbook(fileStream);
}
else
{
Book = new XSSFWorkbook(fileStream);
}
}
///
/// 带模板或数据的Excel生成或操作
///
///
public NPOIExcel(String fileName)
{
Book = CreateBook(fileName);
}
///
/// 创建Excel Book
///
/// 模板文件名
///
private IWorkbook CreateBook(String fileName)
{
FileInfo file = new FileInfo(fileName);
if (!file.Exists)
{
File.Create(fileName).Close();
}
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
IWorkbook book;
if (file.Extension == ".xls")
{
book = new HSSFWorkbook(fs);
}
else
{
book = new XSSFWorkbook(fs);
}
fs.Close();
if (book.NumberOfSheets == 0)
{
book.CreateSheet();
}
return book;
}
///
/// 新建Sheet
///
/// 新建Sheet
public ISheet CreateSheet()
{
return Book.CreateSheet();
}
///
/// 新建Sheet
///
/// 新建Sheet的名称
/// 新建Sheet
public ISheet CreateSheet(String sheetName)
{
return Book.CreateSheet(sheetName);
}
///
/// 设置行高
/// 注:只对当前ActiveSheet有效
///
/// 行号
/// 高度
public void SetRowHeight(int rowIndex, float height)
{
IRow row = Book.GetSheetAt(sheetID).GetRow(rowIndex);
if (row == null)
{
row = Book.GetSheetAt(sheetID).CreateRow(rowIndex);
}
row.Height = (short)(height * 20);
}
///
/// 设置列宽
/// 注:只对当前ActiveSheet有效
///
/// 列号
/// 宽度
public void SetColumnWidth(int columnIndex, short width)
{
Book.GetSheetAt(sheetID).SetColumnWidth(columnIndex, width * 256);
}
///
/// 获取或设置默认行高
/// 注:只对当前ActiveSheet有效
///
public short DefaultRowHeight
{
get
{
return (short)(Book.GetSheetAt(sheetID).DefaultRowHeight / 20);
}
set
{
Book.GetSheetAt(sheetID).DefaultRowHeight = (short)(value * 20);
}
}
///
/// 获取或设置默认列宽
/// 注:只对当前ActiveSheet有效
///
public int DefaultColWidth
{
get
{
return (int)Book.GetSheetAt(sheetID).DefaultColumnWidth;
}
set
{
Book.GetSheetAt(sheetID).DefaultColumnWidth = value;
}
}
///
/// 某一列的列宽自动调整大小
/// 注:只对当前ActiveSheet有效
///
/// 列号
public void AutoColWidth(int colIndex)
{
Book.GetSheetAt(sheetID).AutoSizeColumn(colIndex, true);
}
///
/// 隐藏一行
/// 注:只对当前ActiveSheet有效
///
/// 行号
public void HiddenRow(int rowIndex)
{
IRow row = Book.GetSheetAt(sheetID).GetRow(rowIndex);
if (row == null)
{
row = Book.GetSheetAt(sheetID).CreateRow(rowIndex);
}
row.ZeroHeight = true;
}
///
/// 删除一行
/// 注:只对当前ActiveSheet有效
///
/// 行号
public void RemoveRow(int rowIndex)
{
IRow row = Book.GetSheetAt(sheetID).GetRow(rowIndex);
if (row != null)
{
ActiveSheet.RemoveRow(row);
}
}
///
/// 读取单元格的值
/// 注:只对当前ActiveSheet有效
///
/// 行号
/// 列号
/// 单元格的值
public object ReadValue(int rowIndex, int columnIndex, bool? isDateTime = null)
{
try
{
ICell cell = Book.GetSheetAt(sheetID).GetRow(rowIndex).GetCell(columnIndex);
short df = cell.CellStyle.DataFormat;
//return cell.ToString();
switch (cell.CellType)
{
case CellType.Blank:
return null;
case CellType.Boolean:
return cell.BooleanCellValue;
case CellType.Error:
throw new Exception("Cell Value Error");
case CellType.Formula:
{
switch (cell.CachedFormulaResultType)
{
case CellType.Blank:
return "";
case CellType.Boolean:
return cell.BooleanCellValue;
case CellType.Error:
throw new Exception("Cell Value Error");
case CellType.Formula:
throw new Exception("The Formula of this cell is too complex!");
case CellType.Numeric:
if (isDateTime == null)
{
if (DateUtil.IsCellDateFormatted(cell))
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
}
else if (isDateTime == true)
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
case CellType.String:
return cell.StringCellValue;
case CellType.Unknown:
return cell.ToString();
default:
return cell.ToString();
}
}
case CellType.Numeric:
{
if (isDateTime == null)
{
if (DateUtil.IsCellDateFormatted(cell))
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
}
else if (isDateTime == true)
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
}
case CellType.String:
return cell.StringCellValue;
case CellType.Unknown:
return cell.ToString();
default:
return cell.ToString();
}
}
catch (System.NullReferenceException)
{
return null;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 设置单元格的值
/// 注:只对当前ActiveSheet有效
///
/// 行号
/// 列号
/// 单元格的值
public void SetValue(int rowIndex, int columnIndex, object value)
{
SetValue(rowIndex, columnIndex, value, false);
}
///
/// 设置单元格的值
/// 注:只对当前ActiveSheet有效
///
/// 行号
/// 列号
/// 单元格的值
/// 是否是公式
public void SetValue(int rowIndex, int columnIndex, object value, bool isFormula)
{
IRow row = Book.GetSheetAt(sheetID).GetRow(rowIndex);
if (row == null)
{
row = Book.GetSheetAt(sheetID).CreateRow(rowIndex);
}
ICell cell = row.GetCell(columnIndex);
if (cell == null)
{
cell = row.CreateCell(columnIndex);
}
if (value == null)
{
cell.SetCellValue("");
}
if (isFormula)
{
cell.SetCellFormula(value.ToString());
}
else
{
if (value is short)
{
cell.SetCellValue((short)value);
}
else if (value is int)
{
cell.SetCellValue((int)value);
}
else if (value is long)
{
cell.SetCellValue((long)value);
}
else if (value is float)
{
cell.SetCellValue((float)value);
}
else if (value is double)
{
cell.SetCellValue((double)value);
}
else if (value is bool)
{
cell.SetCellValue((bool)value);
}
else if (value is DateTime)
{
cell.SetCellValue((DateTime)value);
}
else if (value == null)
{
}
else
{
cell.SetCellValue(value.ToString());
}
}
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 验证类型
/// 验证方式
/// 最小值
/// 最大值
public void SetValueRange(int startRowIndex, int EndRowIndex, int startColInex, int endColIndex, NPOIDataType type, OperatorTypes operatorType, String minValue, String maxValue)
{
SetValueRange(startRowIndex, EndRowIndex, startColInex, endColIndex, type, operatorType, minValue, maxValue, "", "");
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 验证类型
/// 验证方式
/// 最小值
/// 最大值
/// 数据格式
public void SetValueRange(int startRowIndex, int EndRowIndex, int startColInex, int endColIndex, NPOIDataType type, OperatorTypes operatorType, String minValue, String maxValue, String formate)
{
SetValueRange(startRowIndex, EndRowIndex, startColInex, endColIndex, type, operatorType, minValue, maxValue, formate, "");
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 验证类型
/// 验证方式
/// 最小值
/// 最大值
/// 数据格式
/// 报错信息
public void SetValueRange(int startRowIndex, int EndRowIndex, int startColInex, int endColIndex, NPOIDataType type, OperatorTypes operatorType, String minValue, String maxValue, String formate, String AlertMassage)
{
CellRangeAddressList regions = new CellRangeAddressList(startRowIndex, EndRowIndex, startColInex, endColIndex);
DVConstraint constraint = DVConstraint.CreateNumericConstraint(ValidationType.ANY, 0, null, null);
switch (type)
{
case NPOIDataType.Integer:
constraint = DVConstraint.CreateNumericConstraint(ValidationType.INTEGER, (int)operatorType, minValue, maxValue);
break;
case NPOIDataType.Float:
constraint = DVConstraint.CreateNumericConstraint(ValidationType.DECIMAL, (int)operatorType, minValue, maxValue);
break;
case NPOIDataType.Date:
if (formate == "")
{
formate = "yyyy/MM/dd";
}
constraint = DVConstraint.CreateDateConstraint((int)operatorType, minValue, maxValue, formate);
break;
case NPOIDataType.Time:
constraint = DVConstraint.CreateTimeConstraint((int)operatorType, minValue, maxValue);
break;
case NPOIDataType.TextLength:
constraint = DVConstraint.CreateNumericConstraint(ValidationType.TEXT_LENGTH, (int)operatorType, minValue, maxValue);
break;
default:
break;
}
HSSFDataValidation dataValidate1 = new HSSFDataValidation(regions, constraint);
if (!String.IsNullOrEmpty(AlertMassage))
{
dataValidate1.CreateErrorBox("Error", AlertMassage);
}
ActiveSheet.AddValidationData(dataValidate1);
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 值系列
public void SetValueRange(int startRowIndex, int EndRowIndex, int startColInex, int endColIndex, String[] dataRange)
{
SetValueRange(startRowIndex, EndRowIndex, startColInex, endColIndex, dataRange, "");
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 值系列
/// 报错信息
public void SetValueRange(int startRowIndex, int endRowIndex, int startColInex, int endColIndex, String[] dataRange, String alertMassage)
{
ISheetConditionalFormatting hscf = ActiveSheet.SheetConditionalFormatting;
CellRangeAddress[] regions = {
new CellRangeAddress(startRowIndex, endRowIndex,startColInex,endColIndex)
};
CellRangeAddressList rangeList = new CellRangeAddressList();
rangeList.AddCellRangeAddress(new CellRangeAddress(startRowIndex, endRowIndex, startColInex, endColIndex));
DVConstraint dvconstraint = DVConstraint.CreateExplicitListConstraint(dataRange);
HSSFDataValidation dataValidation = new HSSFDataValidation(rangeList, dvconstraint);
if (!String.IsNullOrEmpty(alertMassage))
{
dataValidation.CreateErrorBox("Error", alertMassage);
}
ActiveSheet.AddValidationData(dataValidation);
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 计算公式
/// 报错信息
public void SetValueRange(int startRowIndex, int endRowIndex, int startColInex, int endColIndex, String Formula, String alertMassage)
{
ISheetConditionalFormatting hscf = ActiveSheet.SheetConditionalFormatting;
CellRangeAddress[] regions = {
new CellRangeAddress(startRowIndex, endRowIndex,startColInex,endColIndex)
};
CellRangeAddressList rangeList = new CellRangeAddressList();
rangeList.AddCellRangeAddress(new CellRangeAddress(startRowIndex, endRowIndex, startColInex, endColIndex));
DVConstraint dvconstraint = DVConstraint.CreateFormulaListConstraint(Formula);
HSSFDataValidation dataValidation = new HSSFDataValidation(rangeList, dvconstraint);
if (!String.IsNullOrEmpty(alertMassage))
{
dataValidation.CreateErrorBox("Error", alertMassage);
}
ActiveSheet.AddValidationData(dataValidation);
}
///
/// 设置一个区域内的单元格的值范围
/// 注:只对当前ActiveSheet有效
///
/// 开始行
/// 结束行
/// 开始列
/// 结束列
/// 计算公式
public void SetValueRange(int startRowIndex, int endRowIndex, int startColInex, int endColIndex, String Formula)
{
SetValueRange(startRowIndex, endColIndex, startRowIndex, endColIndex, Formula, "");
}
///
/// 生成单元格样式
///
/// 与当前Excel相关的单元格样式
public ICellStyle CreateCellStyle()
{
return Book.CreateCellStyle();
}
///
/// 生成字体
///
/// 与当前Excel相关的字体
public IFont CreateFont()
{
return Book.CreateFont();
}
///
/// 设置单元格样式
/// 注:只对当前ActiveSheet有效
///
/// 行号
/// 列号
/// 样式
public void SetStyle(int rowIndex, int columnIndex, ICellStyle style)
{
IRow row = Book.GetSheetAt(sheetID).GetRow(rowIndex);
if (row == null)
{
row = Book.GetSheetAt(sheetID).CreateRow(rowIndex);
}
ICell cell = row.GetCell(columnIndex);
if (cell == null)
{
cell = row.CreateCell(columnIndex);
}
cell.CellStyle = style;
}
///
/// 合并单元格
/// 注:只对当前ActiveSheet有效
///
/// 开始行号
/// 开始列号
/// 结束行号
/// 结束列号
public void MergeCells(int startRowIndex, int startColumnIndex, int endRowIndex, int endColumnIndex)
{
int Index = Book.GetSheetAt(sheetID).AddMergedRegion(new CellRangeAddress(startRowIndex, endRowIndex, startColumnIndex, endColumnIndex));
}
///
/// 拆分单元格
/// 注1:只对当前ActiveSheet有效
/// 注2:只有合并的单元格才能拆分
///
/// 开始行号
/// 开始列号
public void UnMergeCells(int startRowIndex, int startColumnIndex)
{
int merges = Book.GetSheetAt(sheetID).NumMergedRegions;
CellRangeAddress merge;
for (int i = 0; i < merges; i++)
{
merge = Book.GetSheetAt(sheetID).GetMergedRegion(i);
if (merge.FirstRow == startRowIndex && merge.FirstColumn == startColumnIndex)
{
Book.GetSheetAt(sheetID).RemoveMergedRegion(i);
break;
}
}
}
///
/// 保存到文件
/// 注:有模板的,文件扩展名与模板一样;没有模板的,文件扩展名为“.xls”;
///
/// 保存文件名
public void Save(String fileName)
{
FileStream file = new FileStream(fileName, FileMode.Create);
Book.Write(file);
file.Close();
}
///
/// 保存到流
/// 注:保存或下载时,有模板的,文件扩展名与模板一样;没有模板的,文件扩展名为“.xls”;
///
/// 内存流
public MemoryStream Save()
{
MemoryStream ms = new MemoryStream();
Book.Write(ms);
return ms;
}
///
/// 把Excel读成DataSet
/// 注:必须是正规表格式
///
/// 读出的Excel
public DataSet ReadAsDataSet()
{
DataSet rtn = new DataSet();
for (int i = 0; i < SheetCount; i++)
{
ISheet sheet = Book.GetSheetAt(i);
rtn.Tables.Add(GetDataTableBySheet(sheet));
}
return rtn;
}
private DataTable GetDataTableBySheet(ISheet sheet)
{
DataTable dt = new DataTable(sheet.SheetName);
int maxCols = 0;
object value;
while ((value = ReadValue(sheet, 0, maxCols)) != null)
{
dt.Columns.Add(value.ToString());
maxCols++;
}
int row = 1;
bool emptyRow = false;
int emptyRowCount = 0;
while (emptyRowCount < 10)
{
emptyRow = true;
DataRow dr = dt.NewRow();
for (int i = 0; i < maxCols; i++)
{
value = ReadValue(sheet, row, i);
if (value != null)
{
dr[i] = value;
emptyRow = false;
}
}
if (!emptyRow)
{
dt.Rows.Add(dr);
emptyRowCount = 0;
}
else
{
emptyRowCount++;
}
row++;
}
return dt;
}
///
/// 根据SheetName导出数据为DataTable
///
/// Sheet名称
///
public DataTable GetDataTableBySheet(String sheetName)
{
ISheet sheet = Book.GetSheet(sheetName);
if (sheet != null)
{
return GetDataTableBySheet(sheet);
}
return null;
}
///
/// 根据SheetName导出数据为DataTable
///
/// Sheet编号
///
public DataTable GetDataTableBySheet(int sheetIndex)
{
ISheet sheet = Book.GetSheetAt(sheetIndex);
if (sheet != null)
{
return GetDataTableBySheet(sheet);
}
return null;
}
///
/// 写入表格
///
/// 表格数据
/// 写入的起始列
/// 写入的起始行
/// 标题颜色
/// 是否需要四周边框
public void WriteDataTable(DataTable Data, int col = 1, int row = 1, short? titleColor = null, bool fullBorder = true)
{
if (Data == null)
{
return;
}
var titleStyle = CreateCellStyle();
var rowStyle = CreateCellStyle();
if (titleColor != null)
titleStyle.FillForegroundColor = titleColor.Value;
titleStyle.FillPattern = FillPattern.SolidForeground;
if (fullBorder)
{
titleStyle.BorderBottom = BorderStyle.Thin;
titleStyle.BorderLeft = BorderStyle.Thin;
titleStyle.BorderRight = BorderStyle.Thin;
titleStyle.BorderTop = BorderStyle.Thin;
titleStyle.BottomBorderColor = NPOIColor.BLACK;
titleStyle.LeftBorderColor = NPOIColor.BLACK;
titleStyle.RightBorderColor = NPOIColor.BLACK;
titleStyle.TopBorderColor = NPOIColor.BLACK;
rowStyle.BorderBottom = BorderStyle.Thin;
rowStyle.BorderLeft = BorderStyle.Thin;
rowStyle.BorderRight = BorderStyle.Thin;
rowStyle.BorderTop = BorderStyle.Thin;
rowStyle.BottomBorderColor = NPOIColor.BLACK;
rowStyle.LeftBorderColor = NPOIColor.BLACK;
rowStyle.RightBorderColor = NPOIColor.BLACK;
rowStyle.TopBorderColor = NPOIColor.BLACK;
}
int iCol = 0, iRow = 1;
foreach (DataColumn dc in Data.Columns)
{
SetValue(row, col + iCol, dc.ColumnName);
SetStyle(row, col + iCol, titleStyle);
iCol++;
}
rowStyle.FillForegroundColor = NPOIColor.WHITE;
foreach (DataRow dr in Data.Rows)
{
iCol = 0;
foreach (DataColumn dc in Data.Columns)
{
SetValue(row + iRow, col + iCol, dr[dc]);
SetStyle(row + iRow, col + iCol, rowStyle);
iCol++;
}
iRow++;
}
for (int i = 0; i < iCol; i++)
{
this.AutoColWidth(i);
}
}
///
/// 读取单元格的值
/// 注:只对当前ActiveSheet有效
///
/// 行号
/// 列号
/// 单元格的值
public object ReadValue(ISheet sheet, int rowIndex, int columnIndex, bool? isDateTime = null)
{
try
{
ICell cell = sheet.GetRow(rowIndex).GetCell(columnIndex);
short df = cell.CellStyle.DataFormat;
//return cell.ToString();
switch (cell.CellType)
{
case CellType.Blank:
return null;
case CellType.Boolean:
return cell.BooleanCellValue;
case CellType.Error:
throw new Exception("Cell Value Error");
case CellType.Formula:
{
switch (cell.CachedFormulaResultType)
{
case CellType.Blank:
return "";
case CellType.Boolean:
return cell.BooleanCellValue;
case CellType.Error:
throw new Exception("Cell Value Error");
case CellType.Formula:
throw new Exception("The Formula of this cell is too complex!");
case CellType.Numeric:
if (isDateTime == null)
{
if (DateUtil.IsCellDateFormatted(cell))
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
}
else if (isDateTime == true)
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
case CellType.String:
return cell.StringCellValue;
case CellType.Unknown:
return cell.ToString();
default:
return cell.ToString();
}
}
case CellType.Numeric:
{
if (isDateTime == null)
{
if (DateUtil.IsCellDateFormatted(cell))
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
}
else if (isDateTime == true)
{
return cell.DateCellValue;
}
else
{
return cell.NumericCellValue;
}
}
case CellType.String:
return cell.StringCellValue;
case CellType.Unknown:
return cell.ToString();
default:
return cell.ToString();
}
}
catch (System.NullReferenceException)
{
return null;
}
catch (Exception ex)
{
throw ex;
}
}
public int SheetCount
{
get
{
return Book.NumberOfSheets;
}
}
public String GetSheetName(int Index)
{
return Book.GetSheetName(Index);
}
public void AddPicture(byte[] data, int row, int col)
{
int picIndex = Book.AddPicture(data, PictureType.PNG);
IDrawing draw = ActiveSheet.CreateDrawingPatriarch();
IClientAnchor anchor = draw.CreateAnchor(0, 0, 255, 255, col, row, col + 5, col + 5);
IPicture pic = draw.CreatePicture(anchor, picIndex);
pic.Resize();
}
}
public enum OperatorTypes
{
///
/// 介于最大值与小值之间
///
BETWEEN = OperatorType.BETWEEN,
///
/// 等于最小值
///
EQUAL = OperatorType.EQUAL,
///
/// 大于或等于最小值
///
GREATER_OR_EQUAL = OperatorType.GREATER_OR_EQUAL,
///
/// 大于最小值
///
GREATER_THAN = OperatorType.GREATER_THAN,
///
/// 忽略
///
NO_COMPARISON = OperatorType.IGNORED,
///
/// 小于或等于最小值
///
LESS_OR_EQUAL = OperatorType.LESS_OR_EQUAL,
///
/// 小于最小值
///
LESS_THAN = OperatorType.LESS_THAN,
///
/// 不在最小值与最大值之间
///
NOT_BETWEEN = OperatorType.NOT_BETWEEN,
///
/// 不等于最小值
///
NOT_EQUAL = OperatorType.NOT_EQUAL
}
public enum NPOIDataType
{
///
/// 验证整数
///
Integer,
///
/// 验证符点数
///
Float,
///
/// 验证日期
///
Date,
///
/// 验证时间
///
Time,
///
/// 验证字符长度
///
TextLength
}
public static class NPOIColor
{
///
/// 红色
///
public static short RED { get { return NPOI.HSSF.Util.HSSFColor.Red.Index; } }
///
/// 蓝色
///
public static short BLUE { get { return NPOI.HSSF.Util.HSSFColor.Blue.Index; } }
///
/// 浅绿色
///
public static short AQUA { get { return NPOI.HSSF.Util.HSSFColor.Aqua.Index; } }
///
/// 自动
///
public static short AUTOMATIC { get { return NPOI.HSSF.Util.HSSFColor.Automatic.Index; } }
///
/// 黑色
///
public static short BLACK { get { return NPOI.HSSF.Util.HSSFColor.Black.Index; } }
///
/// 蓝灰色
///
public static short BLUE_GREY { get { return NPOI.HSSF.Util.HSSFColor.BlueGrey.Index; } }
///
/// 明绿色
///
public static short BRIGHT_GREEN { get { return NPOI.HSSF.Util.HSSFColor.BrightGreen.Index; } }
///
/// 棕色
///
public static short BROWN { get { return NPOI.HSSF.Util.HSSFColor.Brown.Index; } }
///
/// 正常
///
public static short COLOR_NORMAL { get { return NPOI.HSSF.Util.HSSFColor.COLOR_NORMAL; } }
///
/// 珊瑚色
///
public static short CORAL { get { return NPOI.HSSF.Util.HSSFColor.Coral.Index; } }
///
/// 亮蓝色
///
public static short CORNFLOWER_BLUE { get { return NPOI.HSSF.Util.HSSFColor.CornflowerBlue.Index; } }
///
/// 深蓝色
///
public static short DARK_BLUE { get { return NPOI.HSSF.Util.HSSFColor.DarkBlue.Index; } }
///
/// 深绿色
///
public static short DARK_GREEN { get { return NPOI.HSSF.Util.HSSFColor.DarkGreen.Index; } }
///
/// 深红色
///
public static short DARK_RED { get { return NPOI.HSSF.Util.HSSFColor.DarkRed.Index; } }
///
/// 深茶色
///
public static short DARK_TEAL { get { return NPOI.HSSF.Util.HSSFColor.DarkTeal.Index; } }
///
/// 深黄
///
public static short DARK_YELLOW { get { return NPOI.HSSF.Util.HSSFColor.DarkYellow.Index; } }
///
/// 金色
///
public static short GOLD { get { return NPOI.HSSF.Util.HSSFColor.Gold.Index; } }
///
/// 绿色
///
public static short GREEN { get { return NPOI.HSSF.Util.HSSFColor.Green.Index; } }
///
/// 25%灰色
///
public static short GREY_25_PERCENT { get { return NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index; } }
///
/// 40%灰色
///
public static short GREY_40_PERCENT { get { return NPOI.HSSF.Util.HSSFColor.Grey40Percent.Index; } }
///
/// 50%灰色
///
public static short GREY_50_PERCENT { get { return NPOI.HSSF.Util.HSSFColor.Grey50Percent.Index; } }
///
/// 80%灰色
///
public static short GREY_80_PERCENT { get { return NPOI.HSSF.Util.HSSFColor.Grey80Percent.Index; } }
///
/// 靛蓝色
///
public static short INDIGO { get { return NPOI.HSSF.Util.HSSFColor.Indigo.Index; } }
///
/// 淡紫色
///
public static short LAVENDER { get { return NPOI.HSSF.Util.HSSFColor.Lavender.Index; } }
///
/// 粉黄色
///
public static short LEMON_CHIFFON { get { return NPOI.HSSF.Util.HSSFColor.LemonChiffon.Index; } }
///
/// 淡蓝色
///
public static short LIGHT_BLUE { get { return NPOI.HSSF.Util.HSSFColor.LightBlue.Index; } }
///
/// 淡亮蓝色
///
public static short LIGHT_CORNFLOWER_BLUE { get { return NPOI.HSSF.Util.HSSFColor.LightCornflowerBlue.Index; } }
///
/// 淡绿色
///
public static short LIGHT_GREEN { get { return NPOI.HSSF.Util.HSSFColor.LightGreen.Index; } }
///
/// 淡桔黄色
///
public static short LIGHT_ORANGE { get { return NPOI.HSSF.Util.HSSFColor.LightOrange.Index; } }
///
/// 淡蓝绿色
///
public static short LIGHT_TURQUOISE { get { return NPOI.HSSF.Util.HSSFColor.LightTurquoise.Index; } }
///
/// 淡黄色
///
public static short LIGHT_YELLOW { get { return NPOI.HSSF.Util.HSSFColor.LightYellow.Index; } }
///
/// 绿黄色
///
public static short LIME { get { return NPOI.HSSF.Util.HSSFColor.Lime.Index; } }
///
/// 栗色
///
public static short MAROON { get { return NPOI.HSSF.Util.HSSFColor.Maroon.Index; } }
///
/// 橄榄绿色
///
public static short OLIVE_GREEN { get { return NPOI.HSSF.Util.HSSFColor.OliveGreen.Index; } }
///
/// 桔色
///
public static short ORANGE { get { return NPOI.HSSF.Util.HSSFColor.Orange.Index; } }
///
/// 白灰蓝色
///
public static short PALE_BLUE { get { return NPOI.HSSF.Util.HSSFColor.PaleBlue.Index; } }
///
/// 粉红色
///
public static short PINK { get { return NPOI.HSSF.Util.HSSFColor.Pink.Index; } }
///
/// 紫红色
///
public static short PLUM { get { return NPOI.HSSF.Util.HSSFColor.Plum.Index; } }
///
/// 玫瑰红色
///
public static short ROSE { get { return NPOI.HSSF.Util.HSSFColor.Rose.Index; } }
///
/// 高贵蓝
///
public static short ROYAL_BLUE { get { return NPOI.HSSF.Util.HSSFColor.RoyalBlue.Index; } }
///
/// 海绿色
///
public static short SEA_GREEN { get { return NPOI.HSSF.Util.HSSFColor.SeaGreen.Index; } }
///
/// 天空蓝
///
public static short SKY_BLUE { get { return NPOI.HSSF.Util.HSSFColor.SkyBlue.Index; } }
///
/// 棕褐色
///
public static short TAN { get { return NPOI.HSSF.Util.HSSFColor.Tan.Index; } }
///
/// 茶色
///
public static short TEAL { get { return NPOI.HSSF.Util.HSSFColor.Teal.Index; } }
///
/// 蓝绿色
///
public static short TURQUOISE { get { return NPOI.HSSF.Util.HSSFColor.Turquoise.Index; } }
///
/// 紫色
///
public static short VIOLET { get { return NPOI.HSSF.Util.HSSFColor.Violet.Index; } }
///
/// 白色
///
public static short WHITE { get { return NPOI.HSSF.Util.HSSFColor.White.Index; } }
///
/// 黄色
///
public static short YELLOW { get { return NPOI.HSSF.Util.HSSFColor.Yellow.Index; } }
}
///
/// 针对excel的Oledb
///
public class OleDbExcel
{
///
/// OLEDB连接
///
public OleDbConnection Connection
{
get;
set;
}
///
/// 用Oledb对Excel进行操作
/// 注:必须是标准表形式Excel内容
///
/// Excel文件
public OleDbExcel(String excelFile)
{
String conStr = String.Empty;
FileInfo file = new FileInfo(excelFile);
if (!file.Exists) { throw new Exception("文件不存在"); }
String extension = file.Extension;
switch (extension)
{
case ".xls":
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
case ".xlsx":
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
break;
default:
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
break;
}
//链接Excel
Connection = new OleDbConnection(conStr);
}
private List tableNames;
///
/// 获取Excel内的Sheet名称
///
public List Sheets
{
get
{
if (tableNames == null)
{
try
{
tableNames = new List();
//读取Excel里面的sheet名
Connection.Open();
DataTable schemaTable = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
for (int i = 0; i < schemaTable.Rows.Count; i++)
{
DataRow dr = schemaTable.Rows[i];
String tbName = dr["table_name"].ToString();
if (tbName[tbName.Length - 1] == '$')
{
tableNames.Add(tbName);
}
}
Connection.Close();
}
catch (Exception ex)
{
if (Connection.State != ConnectionState.Closed)
{
Connection.Close();
}
throw new Exception(ex.Message, ex);
}
}
return tableNames;
}
}
///
/// 查询出所有数据
///
/// Sheet名称
/// sheet内的所有数据
public DataSet QueryAll(String tableName)
{
try
{
DataSet excelData = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand();
adapter.SelectCommand.Connection = Connection;
adapter.SelectCommand.CommandText = String.Format("SELECT * FROM {0}", "[" + tableName + "]");
adapter.Fill(excelData);
return excelData;
}
catch (Exception ex)
{
if (Connection.State != ConnectionState.Closed)
{
Connection.Close();
}
throw new Exception(ex.Message, ex);
}
}
///
/// 查询出所有数据
///
/// Sheet序号(从0开始)
/// sheet内的所有数据
public DataSet QueryAll(int tableIndex)
{
return QueryAll(Sheets[tableIndex]);
}
///
/// 利用Sql进行查询
///
/// Sql语句
/// 查询出的数据
public DataSet Query(String sql)
{
try
{
DataSet excelData = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, Connection);
adapter.Fill(excelData);
return excelData;
}
catch (Exception ex)
{
if (Connection.State != ConnectionState.Closed)
{
Connection.Close();
}
throw new Exception(ex.Message, ex);
}
}
///
/// 利用Sql进行查询
///
/// Sql语句
/// 查询参数
/// 查询出的数据
public DataSet Query(String sql, params OleDbParameter[] param)
{
try
{
DataSet excelData = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter(sql, Connection);
adapter.SelectCommand.Parameters.AddRange(param);
adapter.Fill(excelData);
return excelData;
}
catch (Exception ex)
{
if (Connection.State != ConnectionState.Closed)
{
Connection.Close();
}
throw new Exception(ex.Message, ex);
}
}
///
/// 利用Sql进行数据操作
///
/// sql语句
/// 影响的行数
public int ExecuteSql(String sql)
{
try
{
Connection.Open();
OleDbCommand cmd = Connection.CreateCommand();
cmd.CommandText = sql;
int rtn = cmd.ExecuteNonQuery();
Connection.Close();
return rtn;
}
catch (Exception ex)
{
if (Connection.State != ConnectionState.Closed)
{
Connection.Close();
}
throw new Exception(ex.Message, ex);
}
}
///
/// 利用Sql进行数据操作
///
/// sql语句
/// 执行参数
/// 影响的行数
public int ExecuteSql(String sql, params OleDbParameter[] param)
{
try
{
Connection.Open();
OleDbCommand cmd = Connection.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(param);
int rtn = cmd.ExecuteNonQuery();
Connection.Close();
return rtn;
}
catch (Exception ex)
{
if (Connection.State != ConnectionState.Closed)
{
Connection.Close();
}
throw new Exception(ex.Message, ex);
}
}
}
}