最近由于工作需要,要求在无法使用com组件(微软提供,需要安装office才能使用,而且,微软的尿性 大家懂得)的情况下来导出。于是自己在网上找到了EPPlus和NPOI两个插件来导出。
(两个组件的网址,http://epplus.codeplex.com/, http://npoi.codeplex.com/)
具体做法是自己封装了一个公共基类,提供一些接口来实现项目所需要的功能,然后分别使用两种组件来实现这些接口。
实现如下,先从官网下载两个组件所需要的dll文件(EPPlus为EPPlus.dll,NPOI为NPOI.dll、NPOI.OOXML.dll、NPOI.OpenXml4Net.dll、NPOI.OpenXmlFormate.dll),导入到项目中,然后使用相应的命名空间即可使用该组件。
其中EPPlus中主要使用到的命名空间有OfficeOpenXml和OfficeOpenXml.Style,后者主要是控制单元格样式所用到的命名空间。
其中NPOI主要用到得命名空间有NPOI.HSSF.UserModel、NPOI.SS.UserModel、NPOI.HPSF、NPOI.SS.Util
源码如下:其中主动抛出异常部分是我现在修改的,项目中会做特殊处理,这里无法实现了
接口(抽象类)定义如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExcelTool
{
enum EnuExcelType { EPPlus, NPOI};
abstract class ExcelTool
{
public abstract void CreatExcel();
public abstract void CreatSheet(string sheetname);
public abstract void SetCurrentSheet(int sheetIndex);
public abstract void SetCellValue(int row, int col, string value);
public abstract int MergerCells(int firstRow, int firstCol, int lastRow, int lastCol);
public abstract void SetCellsStyle(int firstRow, int firstCol, int lastRow, int lastCol, bool isBold, int size);
public abstract string SaveAs(string fileName);
public abstract void CloseExcel();
}
}
EPPlus 实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Style;
namespace ExcelTool
{
class EPPlusExcelTool : ExcelTool
{
private ExcelPackage excelPackage = null;
private ExcelWorkbook workbook = null;
private ExcelWorksheet worksheet = null;
public override void CloseExcel()
{
excelPackage.Dispose();
worksheet = null;
workbook =