首页 > 代码库 > [原]使用EPPlus读写xlsx文件

[原]使用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 = http://www.mamicode.com/"1";    sheet.Cells[1, 2].Value = http://www.mamicode.com/"2";    sheet.Cells[1, 3].Value = http://www.mamicode.com/"3";    sheet.Cells[1, 4].Value = http://www.mamicode.com/"4";    sheet.Cells[1, 5].Value = http://www.mamicode.com/"5";    sheet.Cells[1, 6].Value = http://www.mamicode.com/"6";    using (Stream stream = new FileStream(path, FileMode.Create))    {        package.SaveAs(stream);    }}
Perfect!

[原]使用EPPlus读写xlsx文件