/// <summary> /// 根据模板Excel执行 /// </summary> /// <param name="buffer"></param> /// <param name="excelVersionEnum"></param> /// <param name="excelGlobalDTO"></param> public virtual void ExecuteByEmptyBuffer(byte[] buffer, ExcelVersionEnum excelVersionEnum, ExcelGlobalDTO <TEntity> excelGlobalDTO) { Stream stream = new MemoryStream(buffer); excelGlobalDTO.Workbook = ExcelHelper.GetWorkbook(stream, excelVersionEnum); this.ExecuteByData(excelGlobalDTO); }
/// <summary> /// 根据流执行 /// </summary> /// <param name="stream"></param> /// <param name="excelVersionEnum"></param> public virtual void ExecuteByStream(Stream stream, ExcelVersionEnum excelVersionEnum) { //获取工作簿 this.GetWorkbook(stream, excelVersionEnum); //获取Sheet this.GetSheets(); //获取实体集合(头部、数据)对象及校验(头部、实体) this.GetEntityAndValidation(); }
/// <summary> /// 获取Sheet /// </summary> /// <param name="stream"></param> /// <param name="excelVersionEnum"></param> /// <returns></returns> public List <ExcelSheetModel <TEntity> > GetSheets(Stream stream, ExcelVersionEnum excelVersionEnum) { //返回结果 List <ExcelSheetModel <TEntity> > sheets = new List <ExcelSheetModel <TEntity> >(); IWorkbook workbook = ExcelHelper.GetWorkbook(stream, excelVersionEnum); //获取所有Sheet int sheetCount = workbook.NumberOfSheets; //遍历Sheet for (int i = 0; i < sheetCount; i++) { //不如不启用当前Sheet则跳过 if (ExcelGlobalDTO.DisableSheetIndexs != null && ExcelGlobalDTO.DisableSheetIndexs.Contains(i)) { continue; } ISheet sheet = workbook.GetSheetAt(i); //获取sheet SheetAttribute sheetAttr = typeof(TEntity).GetCustomAttribute <SheetAttribute>() as SheetAttribute; if (sheetAttr != null && sheetAttr.SheetName != sheet.SheetName) { continue; } //获取头部行 IRow row = sheet.GetRow(ExcelGlobalDTO.GlobalStartRowIndex); if (row == null) { continue; } //获取表头信息 List <string> cellValues = row.Cells.Select(s => ExcelHelper.GetCellValue(s)).ToList(); if (cellValues == null) { continue; } //构建默认一个 ExcelSheetModel <TEntity> sheetModel = new ExcelSheetModel <TEntity>(); sheetModel.SheetIndex = i; sheetModel.SheetName = sheet.SheetName; //设置一个默认 sheets.Add(sheetModel); } return(sheets); }
/// <summary> /// 根据流执行 /// </summary> /// <param name="buffer"></param> /// <param name="excelVersionEnum"></param> public virtual void ExecuteByBuffer(byte[] buffer, ExcelVersionEnum excelVersionEnum) { using (Stream stream = new MemoryStream(buffer)) { //获取工作簿 this.GetWorkbook(stream, excelVersionEnum); } //获取Sheet this.GetSheets(); //获取实体集合(头部、数据)对象及校验(头部、实体) this.GetEntityAndValidation(); }
/// <summary> /// 创建工作簿 /// </summary> /// <param name="versionEnum"></param> /// <returns></returns> public static IWorkbook CreateWorkbook(ExcelVersionEnum versionEnum = ExcelVersionEnum.V2007) { //2003版本 if (versionEnum == ExcelVersionEnum.V2003) { return(new HSSFWorkbook()); } //2007版本 if (versionEnum == ExcelVersionEnum.V2007) { return(new XSSFWorkbook()); } return(null); }
/// <summary> /// 跟进文件流获取工作簿 /// </summary> /// <param name="stream">文件流</param> /// <param name="versionEnum">版本</param> public static IWorkbook GetWorkbook(Stream stream, ExcelVersionEnum versionEnum) { //2003版本 if (versionEnum == ExcelVersionEnum.V2003) { return(new HSSFWorkbook(stream)); } //2007版本 if (versionEnum == ExcelVersionEnum.V2007) { return(new XSSFWorkbook(stream)); } return(null); }
/// <summary> /// 根据模板导出Excel(适用模板+数据) /// </summary> /// <param name="filePath"></param> /// <param name="excelVersionEnum"></param> /// <param name="excelGlobalDTO"></param> public virtual void ExecuteByFile(string filePath, ExcelVersionEnum excelVersionEnum, ExcelGlobalDTO <TEntity> excelGlobalDTO) { //级联处理 FileInfo fileInfo = new FileInfo(filePath); byte[] buffers = new byte[fileInfo.Length]; using (FileStream fs = new FileStream(filePath, FileMode.Open)) { int read; while ((read = fs.Read(buffers, 0, buffers.Length)) > 0) { fs.Dispose(); } //fs.Read(buffers, 0, buffers.Length) } ExecuteByEmptyBuffer(buffers, excelVersionEnum, excelGlobalDTO); }
/// <summary> /// 获取工作簿 /// </summary> /// <param name="stream"></param> /// <param name="excelVersionEnum"></param> public void GetWorkbook(Stream stream, ExcelVersionEnum excelVersionEnum) { ExcelGlobalDTO.PerformanceMonitoring.Start("=====【导入】获取工作簿====="); //获取字节 byte[] buffers = new byte[stream.Length]; int read; read = stream.Read(buffers, 0, buffers.Length); if (read > 0) { stream.Seek(0, SeekOrigin.Begin); ExcelGlobalDTO.FileBytes = buffers; } //版本、工作簿赋值 ExcelGlobalDTO.ExcelVersionEnum = excelVersionEnum; ExcelGlobalDTO.Workbook = ExcelHelper.GetWorkbook(stream, excelVersionEnum); ExcelGlobalDTO.PerformanceMonitoring.Stop(); }