ExcelPatternTool

Excel表格-数据库互导工具

介绍:

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

特点:

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

更新内容:

Date Version Content
V0.1.0 2022-7-29 初始版本

快速开始

编写Pattern文档

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

Sample:

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

Sample:

"DbExport": {               // Db导出规则
"TableKeyType": "Guid", // 表主键类型 可选 "无","int","long","Guid",
"TableName": "Employee" // 表名称
}
  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": { // 校验配置
...
}
},

配置校验

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

Sample1:


"Validation": {
"Target": "单元格数值",
"Description": "整数值需要大于2",
"Convention": "普通校验器",
"Expression": "{value}>=2"
}

Sample2:


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

完整示例请参考 Sample

安装

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

运行

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

参数列表:

参数 含义 用法
-p PatternFile 指定一个Pattern文件(Json), 作为转换的模型文件
-i Input 指定一个Excel文件路径,此文件将作为导入数据源
支持Xls或者Xlsx文件
-o Output 指定一个路径,或Sql连接字符串作为导出目标
当指定 -d 参数为sqlserver, sqlite, mysql时,需指定为连接字符串;
当指定 -d 参数为excel时,需指定为将要另存的Excel文件路径,支持Xls或者Xlsx文件
-s Source 值为excel
-d Destination 值为excel, sqlserver, sqlite或者mysql
-w WaitAtEnd 指定时,程序执行完成后,将等待用户输入退出
-h Help 查看帮助

导出至Sqlite的Sample

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

导出至Excel的Sample

.\ept.exe -p .\sample\pattern.json -i .\sample\test.xlsx -o .\sample\output.xlsx -s excel -d excel
  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" }
}

可扩展性

检验提供类ValidatorProvider类具有一定的扩展功能,

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

Sample:

public override Dictionary<string, ValidateConvention> 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;
}

Todo

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

工具

Roslyn Syntax Tool

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

已知问题

作者信息

作者:林小

邮箱:jevonsflash@qq.com

License

The MIT License (MIT)

项目地址

Github:ExcelPatternTool

ExcelPatternTool: Excel表格-数据库互导工具的更多相关文章

  1. go读取excel表格数据

    go读取excel表格数据 使用工具 github.com/Luxurioust/excelize 百度到的都是使用这个 实际上已经改名了 github.com/360EntSecGroup-Skyl ...

  2. 根据excel表格中的内容更新Sql数据库

    关于[无法创建链接服务器 "(null)" 的 OLE DB 访问接口 SQL Server 2008读取EXCEL数据时,可能会报这个错误:无法创建链接服务器 "(nu ...

  3. JXL解析Excel表格内容到数据库

    java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...

  4. 【游戏开发】Excel表格批量转换成CSV的小工具

    一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ...

  5. 【游戏开发】Excel表格批量转换成lua的转表工具

    一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...

  6. 【Javaweb】poi实现通过上传excel表格批量导入数据到数据库

    1.导入poi相关jar包 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jar poi ...

  7. jxl java工具类,导出excel,导入数据库

    1: 引入jxl jar 我使用的为maven管理, <!--Excel工具--> <dependency> <groupId>net.sourceforge.je ...

  8. 数据库数据生成Excel表格(多用在导出数据)

    最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...

  9. Excel表格数据导入MySQL数据库

    有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...

随机推荐

  1. 华为OPS,自定义命令,动态执行命令

     OPS     开放可编程系统OPS(Open Programmability System)是指设备通过提供统一的应用程序接口API(Application Programming Interfa ...

  2. jmeter 基础使用

    相关入门链接 JMeter 5.4.1 教程 插件安装 并发线程 ServerAgent 服务器监控 ServerAgent 下载 Ubuntu 20.04 install jdk/jre 服务器监控 ...

  3. vscode编写的程序中文乱码怎么办?

    (以下教程在源码文件的编码是utf-8的基础上进行!) (dev的源码文件是GBK编码,或者是GB2312?我现在好久没用dev,关于dev的信息可能有错误. 如果拿dev编写的代码用vscode打开 ...

  4. Kafka 生产者解析

    一.消息发送 1.1 数据生产流程 数据生产流程图解: Producer创建时,会创建⼀个Sender线程并设置为守护线程 ⽣产消息时,内部其实是异步流程:⽣产的消息先经过拦截器->序列化器-& ...

  5. sublime速查手册

    零.sublime的优势 容易上手 支持多点编辑 包管理:Package Control 速度快 深度可订制,配置文件放github上 sublime-config 快速文件切换 cmd + p 输入 ...

  6. 给IDEA道个歉,这不是它的BUG,而是反编译插件的BUG。

    你好呀,我是歪歪. 上周我不是发了<我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!>这篇文章吗. 主要描述了在 IDEA 里面反编译后的 class 文件中有这样的代码片段: 很明 ...

  7. 01C语言基础(二)

    Day07 笔记 指针和函数: 栈 帧: 当函数调用时,系统会在 stack 空间上申请一块内存区域,用来供函数调用,主要存放 形参 和 局部变量(定义在函数内部). 当函数调用结束,这块内存区域自动 ...

  8. 下篇:技术 Leader 的思考方式

    作者: 朱春茂(知明) 技术 Leader 是一个对综合素质要求非常高的岗位,不仅要有解具体技术问题的架构能力,还要具备团队管理的能力,更需要引领方向带领团队/平台穿越迷茫进阶到下一个境界的能力.所以 ...

  9. 渗透测试之sql注入点查询

    一切教程在于安全防范,不在于攻击别人黑别人系统为目的 寻找sql注入点方法: 拿到网页后进行查找注入点: 1.通过单引号 ' ;    在 url 后面输入单引号进行回车(如果报错可能存在sql注入为 ...

  10. C#/VB.NET 在Word转PDF时生成目录书签

    当我们在转换Word文档到PDF格式时,想保留Word文档的标题作为PDF书签,那么应该如何操作呢?那么本文将以C#及VB.NET代码为例,介绍如何在Word转PDF时生成目录书签.下面是具体方法和步 ...