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); } } } }