当大家用Excel处理大批量数据时,可能会遇到需要拆分一个Sheet页为多个Excel或者多个Sheet页的情况。
下面提供一个本人使用Spire.Xls组件拆分Excel指定Sheet页的案例。
代码中需要指定你需要拆分的区域,如有需要,可以提前计算好,然后循环调用,即可以将指定Sheet拆分为多个Excel文件。
1 /// <summary> 2 /// 拆分Sheet页 3 /// </summary> 4 /// <param name="fileName">文件名称</param> 5 /// <param name="sheetIndex">sheet索引,从0开始</param> 6 /// <param name="rangeStr">拆分起始区域</param> 7 private static string SplitSheetColumns(string fileName, int sheetIndex, string rangeStr) 8 { 9 string BasePath = System.Windows.Forms.Application.StartupPath; 10 string saveFile = string.Empty; 11 12 using (Spire.Xls.Workbook bookReourse = new Spire.Xls.Workbook()) 13 { 14 bookReourse.LoadFromFile(fileName); 15 Spire.Xls.Worksheet sheetSourse = bookReourse.Worksheets[sheetIndex]; 16 17 int totalRowCount = sheetSourse.Rows.Count(); 18 using (Spire.Xls.Workbook newBook = new Spire.Xls.Workbook()) 19 { 20 newBook.LoadFromFile(BasePath + "\Templates\XXX_Tmplate_New.xls"); //这里需要提供一个空模板,以便拆分后进行填充,或者带列头的模板的也可以。 21 22 Spire.Xls.Worksheet newSheet1 = newBook.Worksheets[0]; 23 24 CellRange range2 = sheetSourse.Range[rangeStr]; 25 26 //foreach (var item in range2) 27 //{ 28 // if (String.IsNullOrWhiteSpace(item.Value.ToString())) 29 // { 30 // item.Value = "0"; //如果有空值就转换为0 31 // } 32 //} 33 34 //这里指定需要读取原Excel文件的区域,例如:A1:B3 35 sheetSourse.Copy(range2, newSheet1.Range["A3:IU" + totalRowCount]); 36 37 //得到新的临时文件名 38 string tmpName = "new_" + DateTime.Now.ToString("hhmmss") + ".xlsx"; 39 40 if (!Directory.Exists(BasePath + "\TempExcelFile")) 41 { 42 Directory.CreateDirectory(BasePath + "\TempExcelFile"); 43 } 44 45 saveFile = BasePath + "\TempExcelFile\" + tmpName; 46 47 if (File.Exists(saveFile)) File.Delete(saveFile); 48 49 //保存Excel 50 newBook.SaveToFile(saveFile, Spire.Xls.ExcelVersion.Version2010); 51 } 52 } 53 return saveFile; 54 }