Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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();
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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();
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
        /// <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();
        }