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