예제 #1
0
        static void DoCuttingExcel(ISheet sheet, EExcelType type, CuttingParam param, ExcelOperateTodoCall doCuttingProcess)
        {
            IRow head   = sheet.GetRow(0);
            int  number = sheet.LastRowNum / param.CuttingSheetPageSize;//将要分割多少个excel
            Dictionary <int, string> columns = new Dictionary <int, string>();

            for (int i = 0; i < head.LastCellNum; i++)
            {
                ICell  cell = head.GetCell(i);
                string cn   = string.Empty;
                if (cell != null)
                {
                    cn = cell.ToString().Trim();
                }
                columns.Add(i, cn);
            }
            string       dir  = param.CuttingExcelSaveDir + "/" + param.OriginExceleName;
            CuttingParam call = new CuttingParam()
            {
                CuttingSheetPageSize = param.CuttingSheetPageSize,
                CuttingExcelSaveDir  = param.CuttingExcelSaveDir,
                CanCuttingPageNumber = number,
                Statue = OperateStatue.Will
            };

            doCuttingProcess(param);
            string format = Common.Data.CommonFormat.DateToMinuteIntFormat;
            string time   = DateTime.Now.ToString(format);//文件夹格式戳

            if (Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            //提取列头
            for (int i = 0; i < number; i++)
            {
                call.Statue            = OperateStatue.Begin;
                call.DoCuttingRowBegin = param.CuttingSheetPageSize * i + 1;
                call.DoCuttitRowEnd    = param.CuttingSheetPageSize * (i + 1) - 1;
                doCuttingProcess(call);
                //进行操作
                string span = DateTime.Now.ToString(format) + i + "." + (type == EExcelType.Xls?EExcelType.Xls.ToString():EExcelType.Xlsx.ToString());
                //只提取列头不为空的单元格
                int end = call.DoCuttitRowEnd >= number?number:call.DoCuttitRowEnd;
                //创建excel

                for (int r = call.DoCuttingRowBegin; r < end; r++)
                {
                }
                //新建excel
                call.Statue = OperateStatue.End;
                doCuttingProcess(call);
            }
        }
예제 #2
0
        public static void ExcelCuttingPage(string excelDir, int cuttingSheetIndex, int pageSize, ExcelOperateTodoCall doCuttingProcess)
        {
            if (!File.Exists(excelDir))
            {//文件不存在
                return;
            }
            if (pageSize < 1)
            {//分割数必须大于0的整数
                return;
            }
            FileInfo   fi      = new FileInfo(excelDir);
            string     fullDir = fi.Directory.FullName;
            string     ext     = fi.Extension;//文件扩展名格式
            EExcelType et      = EExcelType.Xls;

            if (ext.Contains(EExcelType.Xls.ToString()))
            {
                et = EExcelType.Xls;
            }
            else if (ext.Contains(EExcelType.Xlsx.ToString()))
            {
                et = EExcelType.Xlsx;
            }
            string    name = fi.Name.Replace(ext, string.Empty);
            IWorkbook book = GetExcelWorkBook(excelDir, et);
            int       si   = book.NumberOfSheets;

            if (si < cuttingSheetIndex)
            {//查询页数目超出限制
                book.Close();
                return;
            }
            ISheet sheet = book.GetSheetAt(cuttingSheetIndex);
            //读取标题行
            int rn = sheet.LastRowNum;

            if (rn <= pageSize - 1)
            { //行数目小于切割分割限制数目
                book.Close();
                return;
            }
            try
            {
                DoCuttingExcel(sheet, et, new CuttingParam()
                {
                    CuttingExcelSaveDir  = fullDir,
                    CuttingSheetPageSize = pageSize,
                    OriginExceleName     = name
                }, doCuttingProcess);
            }
            catch (Exception ex)
            {
            }
            book.Close();
        }