最近在工作中用到了一些NPOI,發現很好用,但是說明文檔比較少,好多人都直接去參考POI?希望NPOI作者或者某位使用NPOI較多的大神能完善相關文檔,讓這個好用的工具更加好用。回到正題本次項目中主要用到合並多個工作簿(Workbook)的第一個工作表(Sheet)這個功能,一開始的做法是利用XSSFWorkbook.CloneSheet(int sheetNum)這個方法返回一個復制的ISheet,然后用XSSFWorkbook.Add(ISheet item)加入這個復制的ISheet就達到了跨工作簿(Workbook)復制的目的,但是程序運行下來沒效果,然后我猜想這個CloneSheet是復制的本工作簿(Workbook)的工作表,不能跨工作簿(Workbook)復制。一番努力找到了跨工作簿(Workbook)復制的方法。記錄如下,希望遇到與我一樣問題的人能受益。
代碼如下:
/// <summary> /// 將數個Excel文件中的第一個工作表合並至一個Excel文件中 /// </summary> /// <param name="excelFilePaths">需要合並的數個Excel文件路徑</param> /// <param name="desFilePath">合並成的一個Excel文件路徑</param> private void MergeExcels(string[] excelFilePaths, string desFilePath) { XSSFWorkbook mergeWorkBook = new XSSFWorkbook(); for (int i = 0; i < excelFilePaths.Length; i++) { if (File.Exists(excelFilePaths[i])) { using (FileStream fs = new FileStream(excelFilePaths[i], FileMode.Open, FileAccess.Read, FileShare.Write)) { XSSFWorkbook tmpWorkBook = new XSSFWorkbook(fs); XSSFSheet tmpSheet = tmpWorkBook.GetSheetAt(0) as XSSFSheet; tmpSheet.CopyTo(mergeWorkBook, Path.GetFileNameWithoutExtension(excelFilePaths[i]), true, true); } } /* 考慮數據量,此處可以限制最多可以合並工作表的數量 */ //if (mergeWorkBook.NumberOfSheets >= 200) //{ // break; //} } if (mergeWorkBook.NumberOfSheets != 0) { FileStream fsDesFile = new FileStream(desFilePath, FileMode.OpenOrCreate, FileAccess.Write); mergeWorkBook.Write(fsDesFile); fsDesFile.Close(); mergeWorkBook.Close(); } else { mergeWorkBook.Close(); } }
HSSFSheet 也有CopyTo()方法,並且參數與XSSFSheet一致。