Excel插件类库的设计思路

时间:2023-03-09 06:07:07
Excel插件类库的设计思路

一、插件功能:提供多种读取Excel的方式,如NPOI、Com、Aspose,调用接口一致,包括Excel文件路径,sheet名称、读取是否包含列头(即Excel第一行是否为列头行)

二、实现思路
2.1 定义一个接口,该接口提供一个读取Excel的公共方法

 public interface IExcelReader
{
/// <summary>
/// 从excel的datesheet读出数据到DataTable
/// </summary>
/// <param name="filePath">excel文件名</param>
/// <param name="sheetName">sheetName</param>
/// <param name="readHeader">是否读取第一行</param>
/// <returns></returns>
DataTable ReadFromExcel(string filePath, string sheetName = "Sheet1", bool readHeader = false);
}

2.2 每种读取Excel的方式单独定义一个实现类,均集成于公共接口

 public class ExcelReaderNPOIImpl : IExcelReader
{ /// <summary>
/// 读取Excel数据并以DataTable形式返回(NPOI方式)
/// </summary>
/// <param name="filePath"></param>
/// <param name="sheetName"></param>
/// <param name="readHeader">是否包括列头</param>
/// <returns></returns>
public DataTable ReadFromExcel(string filePath, string sheetName = "Sheet1", bool readHeader = false)
{
...
}
} public class ExcelReaderAsposeImpl : IExcelReader
{
/// <summary>
/// 读取Excel数据并以DataTable形式返回(Aspose方式)
/// </summary>
/// <param name="filePath"></param>
/// <param name="sheetName"></param>
/// <param name="readHeader">是否包括列头</param>
/// <returns></returns>
public DataTable ReadFromExcel(string filePath, string sheetName = "Sheet1", bool readHeader = false)
{
...
}
}

2.3 定义一个策略类,通过该类的静态方法返回具体一种实现方法的对象供调用方操作,调用方不用在客户端new具体的类,new的过程由策略类实现

  /// <summary>
/// 选择读取Excel内容的方式
/// </summary>
public class ExcelReaderTypeSelect
{
/// <summary>
/// 返回一个Aspose实现的IExcelReader
/// </summary>
/// <returns></returns>
public static IExcelReader AsposeReader()
{
return new ExcelReaderAsposeImpl();
} /// <summary>
/// 返回一个Com实现的IExcelReader
/// </summary>
/// <returns></returns>
public static IExcelReader ComReader()
{
return new ExcelReaderComImpl();
} /// <summary>
/// 返回一个NPOI实现的IExcelReader
/// </summary>
/// <returns></returns>
public static IExcelReader NpoiReader()
{
return new ExcelReaderNPOIImpl();
}
}