zoukankan      html  css  js  c++  java
  • 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();
            }
        }
  • 相关阅读:
    C#和SqlServer中处理时间格式问题
    ReadOnly之后获取文本框的值
    asp.net给Reaper和GridView添加序号
    SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别
    asp.net获取服务器信息
    Repeater嵌套
    开博说明 拓荒者
    Git的深入理解与GitHub托管服务的使用
    Hadoop学习笔记一:单节点安装
    VirtualBox克隆后无法找到网卡的问题
  • 原文地址:https://www.cnblogs.com/gossip/p/3843080.html
Copyright © 2011-2022 走看看