• ExcelPatternTool: Excel表格-数据库互导工具


    ExcelPatternTool

    Excel表格-数据库互导工具

    介绍:

    指定Pattern文件-一个规则描述的json文档,基于此规则实现Excel表格与数据库之间的导入导出,校验等功能。

    特点:

    1. 小巧,轻量化的命令行工具
    2. 基于json文档的配置
    3. 支持Excel97-2003(xls)与Excel2007及以上(xlsx)格式
    4. 数据库支持SQL server、Sqlite、MySql
    5. 支持单元格注解,样式,公式的导出(导出至Excel)
    6. 内置lambda表达式和正则表达式两种校验器

    更新内容:

    DateVersionContent
    V0.1.02022-7-29初始版本

    快速开始

    编写Pattern文档

    1. 导入规则编写
    • 指定表格的工作表名称SheetName或者工作表序号SheetNumber,二者选一配置即可,SheetName优先,SheetNumber从0开始
    • 指定开始行数SkipRow,这个是实际数据的开始行数,不包含表头行。在Sample中,这个行数为3

    Sample:

    "ExcelImport": {			// excel导入规则
        "SheetName": "",		// 工作表名称
        "SheetNumber": 0,       // 工作表序号
        "SkipRow": 3           // 开始行数
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 导出规则编写
    • 指定数据库表的名称,主键类型。数据库类型将在Cli参数中指定

    Sample:

    "DbExport": {               // Db导出规则
        "TableKeyType": "Guid", // 表主键类型 可选 "无","int","long","Guid",
        "TableName": "Employee" // 表名称
      }
    
    • 1
    • 2
    • 3
    • 4
    1. Pattern配置

    对列进行配置

    • 列指定列标题名称,属性名称,类型和排序
    • 单元格类型为普通类型是"常规"时,直接输出的为单元格值,“包含注解”,“包含样式”,“包含公式”,"全包含"仅对导出至Excel有效
    • Ignore 为True时将忽略这一列,等效于无此列的Pattern设置
    • 列序号为此列在Excel中的编号,从0开始,即A列对应0,B列对应1 …
    • 列属性类型PropType为bool时,可支持0,1,True,False

    Sample:

    
    "Patterns": [                       // Pattern配置
        {
          "PropName": "EmployeeName",   // 属性名称
          "HeaderName": "姓名",         // 列标题名称
          "PropType": "string",         // 属性类型,可选 "string", "DateTime","int","double","bool",
          "CellType": "常规",           // 单元格类型 可选 "常规","包含注解","包含样式","包含公式","全包含"
          "Ignore": false,              // 是否忽略
          "Order": 0,                   // 列序号
          "Validation": {               // 校验配置
           ...
          }
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    配置校验

    • 配置Target,可对单元格值或单元格公式进行校验
    • 普通校验器时,{value}占位符代表当前单元格值或公式的内容
    • Sample1为普通校验器,校验单元格数值,Sample2为正则校验器,校验单元格公式

    Sample1:

        
          "Validation": {
            "Target": "单元格数值",
            "Description": "整数值需要大于2",
            "Convention": "普通校验器",
            "Expression": "{value}>=2"
          }
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Sample2:

        
          "Validation": {
            "Target": "单元格公式",
            "Description": "需要满足正则表达式",
            "Convention": "正则表达式校验器",
            "Expression": "^ROUND\\(AN\\d+\\+BC\\d+\\+BD\\d+\\+BE\\d+\\+BF\\d+\\+BG\\d+\\+BH\\d+,2\\)$"
          }
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    完整示例请参考 Sample

    安装

    不需要特别的安装,在此获取ept.exe,或git pull代码后生成可执行文件

    运行

    1. 进入可执行文件所在目录,并运行
    • 若要导出至Sqlite,请确保相同目录下包含e_sqlite3.dll
    • 若要导出至SQL server,请确保相同录下包含Microsoft.Data.SqlClient.SNI.dll

    参数列表:

    参数含义用法
    -pPatternFile指定一个Pattern文件(Json), 作为转换的模型文件
    -iInput指定一个Excel文件路径,此文件将作为导入数据源
    支持Xls或者Xlsx文件
    -oOutput指定一个路径,或Sql连接字符串作为导出目标
    当指定 -d 参数为sqlserver, sqlite, mysql时,需指定为连接字符串;
    当指定 -d 参数为excel时,需指定为将要另存的Excel文件路径,支持Xls或者Xlsx文件
    -sSource值为excel
    -dDestination值为excel, sqlserver, sqlite或者mysql
    -wWaitAtEnd指定时,程序执行完成后,将等待用户输入退出
    -hHelp查看帮助

    导出至Sqlite的Sample

    .\ept.exe -p .\sample\pattern.json -i .\sample\test.xlsx -o "Data Source=mato.db" -s excel -d sqlite
    
    • 1

    导出至Excel的Sample

    .\ept.exe -p .\sample\pattern.json -i .\sample\test.xlsx -o .\sample\output.xlsx -s excel -d excel
    
    • 1
    1. 等待程序执行完毕

    结果

    将在-o 参数指定的地址生成数据
    生成至Excel

    生成至Sqlite

    其他

    配置

    ept.exe 相同目录下新建appsettings.json可自定义配置,若无此文件将采用自定义样式配置,如下:

    {
      "HeaderDefaultStyle": {
        "DefaultFontName": "宋体",
        "DefaultFontColor": "#FFFFFF",
        "DefaultFontSize": 10,
        "DefaultBorderColor": "#000000",
        "DefaultBackColor": "#888888"
      },
      "BodyDefaultStyle": {
        "DefaultFontName": "宋体",
        "DefaultFontColor": "#000000",
        "DefaultFontSize": 10,
        "DefaultBorderColor": "#000000",
        "DefaultBackColor": "#FFFFFF"
      },
      "CellComment": {
        "DefaultAuthor": "Linxiao"
    
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    可扩展性

    检验提供类ValidatorProvider类具有一定的扩展功能,
    InitConventions方法对校验行为进行初始化,默认提供RegularExpression,LambdaExpression对应的委托函数分别实现了正则表达式校验和普通表达式校验,重写InitConventions可实现一个自定义方式校验

    Sample:

    public override Dictionary InitConventions()
    {
    
        var defaultConventions = base.InitConventions();
        //x 为当前列轮询的字段规则PatternItem对象,
        //e 为当前行轮询的Entity对象
        //返回ProcessResult作为校验结果
        defaultConventions.Add("MyExpression", new ValidateConvention((x, e) =>
        {
            //再此编写自定义校验功能
            //可用 x.PropName(或PropertyTypeMaper(x.PropName)) 获取当前列轮询的字段(Excel表头)名称
            //返回ProcessResult作为校验结果,IsValidated设置为true表示校验通过
            x.Validation.ProcessResult.IsValidated = true;
            return x.Validation.ProcessResult;
        }));
    
        return defaultConventions;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Todo

    1. 从数据库导入
    2. ept带UI版本(WPF)

    工具

    Roslyn Syntax Tool

    • 此工具能将C#代码,转换成使用语法工厂构造器(SyntaxFactory)生成等效语法树代码

    已知问题

    作者信息

    作者:林小

    邮箱:jevonsflash@qq.com

    License

    The MIT License (MIT)

    项目地址

    Github:ExcelPatternTool

  • 相关阅读:
    c++primer 正则表达式详细介绍和实例
    php7.4编译安装,及重要的拓展库
    win11开机动画关闭教程
    SpringBoot 自动装配原理
    学习java第七十四天
    再获认可!知道创宇入选“业务安全推进计划”首批成员单位
    极市整理的超全CV资源:CVPR、ECCV、valse资源汇总
    【Linux】第二篇——权限管理
    【C++那些事儿】内联函数,auto,以及C++中的空指针nullptr
    Linux:LVS (DR群集搭建)
  • 原文地址:https://blog.csdn.net/jevonsflash/article/details/126105663