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();
            }
        }
  • 相关阅读:
    HDR & Bloom
    Parallax Mapping
    Normal Mapping & Tangent Space
    Gamma校正背后的原理
    内存对齐及其原理
    关于深度值的一些需要说明的点
    帧缓冲(Framebuffer)
    面剔除和深度测试
    工具·MashLab调整网格模型坐标系
    工具·notepad++正则表达式替换文本
  • 原文地址:https://www.cnblogs.com/gossip/p/3843080.html
Copyright © 2011-2022 走看看