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插件类库的设计思路

时间: 2024-07-30 21:58:50

Excel插件类库的设计思路的相关文章

这个用js写的“智能推荐”插件设计思路别具一格啊

现在"智能推荐"几乎成了一个内容网站的标配,为了提高用户的滞留时间,就需要想办法搞些新花样.比如用户文章读到最后时,把用户感兴趣的文章列出来,美其名曰:猜你喜欢. 现在,如果小编出10000美刀,让你来实现这个智能推荐功能,你会怎么去做呢?根据常理,思路是不是应该是这样的? 1.设计一张tag表,每篇文章都有相应的tag,这样就可以根据tag给读者推荐相似的文章. 2.给每个用户设计一张用户自画像算法,根据算法去分析每篇文章,然后把相关文章推荐给用户. 实话说,要做好的话非常不容易,估

[老文章搬家] 插件化软件设计的头疼问题以及可能的解决思路

11年的文章,当时在做系统集成,实际上当时的思路到现在我还在琢磨,只不过后来就不做系统集成了,也一直没机会深入下去解决这个问题. ==== 正文 ==== 一直以来做的项目中有很大一部分工作量都是有关集成设备的工作.为了方便扩展以支持更多厂家的设备,但在这个过程中遇到了非常头疼的问题,在这里我把问题描述一下,欢迎大家来探讨. 问题描述:所谓设备集成,多数情况下可以简化为SDK的集成(这个比较方便,有时候我们宁愿直接集成协议,但是厂家有厂家的考虑).针对这种情况,我们的系统采用了比较典型的插件式设

基于类库的设计(Util)

因为公司一直都没有一个标准的基础类库所以就组建了一个. 公司小,接的项目都是小项目,局域网使用的内部系统,没啥并发量,在此就没考虑并发量的处理(其实我也不懂). 设计思路,分为四大项,底层实体类,日志记载,数据库处理,工具类集合. 底层实体类,因为公司使用datatables 为网页表格插件,根据datatables的特性,设计了实体类 (Base), 前端接受,转成json的实体类,分为PageDataList(实体类集合)和PageDataTable (datatable) 还有个结果实体类

我们一起完成插件框架的设计与实现

原文:我们一起完成插件框架的设计与实现 开场一些题外话,今天登陆这个"小菜"的博客园,感触颇多."小菜"是我以前在QQ群里面的网名,同时也申请了这个博客园账户,五年前的"小菜"在NET和C++某两个群里面非常的活跃,也非常热心的帮助网友尽能力所及解决技术上的问题.依稀记得当时NET群里面的"青菊.Allen.酷酷",C++群里面的"夏老师.风筝兄"等网友.哥们.时过境迁,后来因为某些原因而慢慢淡出了QQ群里

用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)

1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. (1)流程中审批单 流程中审批单由功能按钮区.特殊功能区.业务表单区.附件区.审批意见区等区域构成,其中,业务表单区理论上包含附件和意见,但是由于附件和意见的业务特殊性,需要单独进行管理,剩下的业务表单就可以看作文档了. 在一些流程审批业务中,业务信息有的是以Excel或word文件等方式专递,这样

Hybrid APP架构设计思路

原文:Hybrid APP架构设计思路 关于Hybrid模式开发app的好处,网络上已有很多文章阐述了,这里不展开. 本文将从以下几个方面阐述Hybrid app架构设计的一些经验和思考. 通讯 作为一种跨语言开发模式,通讯层是Hybrid架构首先应该考虑和设计的,往后所有的逻辑都是基于通讯层展开. Native(以Android为例)和H5通讯,基本原理: Android调用H5:通过webview类的loadUrl方法可以直接执行js代码,类似浏览器地址栏输入一段js一样的效果 webvie

电商 秒杀系统 设计思路和实现方法

电商 秒杀系统 设计思路和实现方法 2017年05月26日 00:06:35 阅读数:3662 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1)低廉价格:(2)大幅推广:(3)瞬时售空:(4)一般是定时上架:(5)时间短.瞬时并发量高: 2 秒杀技术挑战 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有: 对现有网站业务造

秒杀的设计思路

电商:如何设计一个秒杀系统 什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到.对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购. 秒杀系统场景特点 秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增. 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功. 秒杀业务流程比较简单,一般就是下订单减库存. 秒杀架构设计理

Pongo网页版JavaScript源代码及设计思路

1.游戏背景介绍(写在前面的废话): 五月初的某天,看到某网推荐了这款游戏,Pongo,看着还不错的样子就用ipad下下来试玩了下,玩了两局感觉还错挺过瘾的,因为是手欠类游戏嘛大家懂的. 但是没一会发现游戏在ipad似乎有些bug,玩一会就会卡住然后只能强退了,真是揪心,记录还等着破呢. 怎么办?玩游戏不如玩自己的游戏的念头又邪恶的出现了,然后就把pad丢给了朋友虐心去,我默默回到电脑前开始动手自己写个不会卡的. 大概两小时吧,写出了基本框架,然后扔sinaapp里试了下效果基本能玩就洗洗睡了.