使用EPPlus讀寫xlsx文件


朋友有個需求,想對N張excel表做過濾和合並的處理,拜托我寫個小程序。因為用戶的背景是非專業用戶,因此最好的選擇是寫個GUI程序,再加上讀寫excel的需求,所以我的首選就是C#的WinForm了。

經過搜索,讀寫excel文件有3種方法:

  1. 采用OleDB讀取EXCEL文件
  2. 引用的com組件:Microsoft.Office.Interop.Excel
  3. 利用第三方庫

因為前2種方法都只能在windows平台下使用,雖然能夠完成當前的需求,不過不利於自身的積累(筆者主要是跨平台開發為主),所以打算趁此機會了解一下讀寫excel的第三方跨平台庫。因此進一步搜索讀寫excel的庫,主要有:

  1. NPOI(http://npoi.codeplex.com/)
  2. MyXls(http://sourceforge.net/projects/myxls/)
  3. Koogra(http://sourceforge.net/projects/koogra/)
  4. ExcelLibrary(http://code.google.com/p/excellibrary/)
  5. ExcelPackage(http://excelpackage.codeplex.com/)
  6. EPPlus(http://epplus.codeplex.com/)
  7. LinqToExcel(http://code.google.com/p/linqtoexcel/)

其中大部分的意見都認為“對於Excel 97-2003格式,還是用NPOI最好;而對於2007(xlsx)以上版本,可以使用EPPlus”。由於工作中基本上都是使用xlsx,因此這里直接選擇了EPPlus。

EPPlus讀取excel:

using (ExcelPackage package = new ExcelPackage(new FileStream(path, FileMode.Open)))
{
    for (int i = 1; i <= package.Workbook.Worksheets.Count; ++i)
    {
        ExcelWorksheet sheet = package.Workbook.Worksheets[i];
        for (int j = sheet.Dimension.Start.Column, k = sheet.Dimension.End.Column; j <= k; j++)
        {
            for (int m = sheet.Dimension.Start.Row, n = sheet.Dimension.End.Row; m <= n; m++)
            {
                string str = GetValue(sheet, m, j);
                if (str != null)
                {
                    // do something
                }
            }
        }
    }
}

EPPlus寫入excel:

using (ExcelPackage package = new ExcelPackage())
{
    ExcelWorksheet sheet = package.Workbook.Worksheets.Add("Sheet1");
    sheet.Cells[1, 1].Value = "1";
    sheet.Cells[1, 2].Value = "2";
    sheet.Cells[1, 3].Value = "3";
    sheet.Cells[1, 4].Value = "4";
    sheet.Cells[1, 5].Value = "5";
    sheet.Cells[1, 6].Value = "6";
    using (Stream stream = new FileStream(path, FileMode.Create))
    {
        package.SaveAs(stream);
    }
}

Perfect!


免責聲明!

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



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