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();
}
}
Excel插件类库的设计思路的更多相关文章
- CMDB服务器管理系统【s5day87】:需求讨论-设计思路
自动化运维平台愿景和服务器管理系统背景 服务器管理系统 管理后台示例 需求和设计 为什么开发服务器管理系统? 背景: 原来是用Excel维护服务器资产,samb服务[多个运维人员手动维护] 搭建运维自 ...
- 『设计』Laura.Compute 设计思路
前言: 前一篇文章 <『开源』也顺手写一个 科学计算器:重磅开源> ,继 Laura.Compute 算法开源之后,有 博客园 园友 希望公开一下 Laura.Compute算法 的 设计 ...
- 一个方便且通用的导出数据到 Excel 的类库
一个方便且通用的导出数据到 Excel 的类库 起源: 之前在做一个项目时,客户提出了许多的导出数据的需求: 导出用户信息 导出业务实体信息 各种查询都要能导出 导出的数据要和界面上看到的一致 可以分 ...
- 7.地图随机装饰,与转化过程补充,与ai的设计思路
这两天本来只想实现地图的随机装饰,然后发现以前的bin格式设计存在不足,所以最后不得不去改地图,并去重制整个地图的阶段,此篇总结这个过程 先描述下bin结构 首先地图由无数六边形组合,一个六边形由两层 ...
- Excel操作类库最常用到的4种开源项目与MS Excel类库写操作对比分析性能
4种开源Excel读写类库与MS Excel类库写操作对比 软件开发过程中,经常需要将数据保存为.xls或.xlsx文件.之前发现微软提供的Microsoft.Office.Interop.Excel ...
- 不需要高价购买BI工具,掌握这个Excel插件就能碾压大数据
曾几何时,EXCEL在数据界可谓是独树一帜,引领风骚,在职场中无人不知,无人不晓.但是随着大数据的出现,EXCEL便风光不再,江河日下,一度被其他大数据工具挤到了后面,逐渐被边缘化了.而我是一个EX ...
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路
最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...
- ENode框架单台机器在处理Command时的设计思路
设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...
随机推荐
- 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图
如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?
- SQL中删除某数据库所有trigger及sp
SQL中删除某数据库所有trigger及sp 编写人:CC阿爸 2014-6-14 在日常SQL数据库的操作中,如何快速的删除所有trigger及sp呢 以下有三种方式可快速处理. --第一种 - ...
- mysql查询语句(mysql学习笔记七)
Sql语句 一般顺序GHOL : group by,having ,order by,limit 如果是分组,应该使用对分组字段进行排序的group by语法 ...
- PHP生成随机字符串包括大小写字母
PHP生成随机字符串包括大小写字母,这里介绍两种方法: 第一种:利用字符串函数操作 <?php /** *@blog <www.phpddt.com> */ function cre ...
- delphi XE7 中的消息
在delphi XE7的程序开发中,消息机制保证进程间的通信. 在程序中,消息来自: 1)系统: 通知你的程序用户输入,涂画以及其他的系统范围的事件: 2)你的程序:不同的程序部分之间的通信信息. ...
- Hadoop伪分布式搭建CentOS
所需软件及版本: jdk-7u80-linux-x64.tar.gz hadoop-2.6.0.tar.gz 1.安装JDK Hadoop 在需在JDK下运行,注意JDK最好使用Oracle的否则可能 ...
- xtrabackup之Innobackupex全备恢复
一.当前环境 [mysql@hadoop1 ~]$ mysql --defaults-/my.cnf -uroot -p123456 -P3306 mysql> show variables l ...
- python zip函数介绍
首先用help(zip)来看一下帮助文档:
- 003-python基础-变量与常量
一.变量的定义 变量就是用来在程序运行期间存储各种需要临时保存可以不断改变的数据的标示符,一个变量应该有一个名字,并且在内存中占据一定的存储单元,在该存储单元中存放变量的值. 二.变量的声明 #!/u ...
- IE8中JSON.stringify方法对自动转换unicode字符的解决方案
IE8内置了JSON对象,用以处理JSON数据.与标准方法的不同,IE8的JSON.stringify会把utf-8字符转码: var str = "我是程序员" var json ...