C# NPOI 合並多個工作簿(Workbook)的第一個工作表(Sheet)


  最近在工作中用到了一些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一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM