ExcelPatternTool: Excel表格-数据库互导工具
ExcelPatternTool
Excel表格-数据库互导工具
介绍:
指定Pattern文件-一个规则描述的json文档,基于此规则实现Excel表格与数据库之间的导入导出,校验等功能。
特点:
- 小巧,轻量化的命令行工具
- 基于json文档的配置
- 支持Excel97-2003(xls)与Excel2007及以上(xlsx)格式
- 数据库支持SQL server、Sqlite、MySql
- 支持单元格注解,样式,公式的导出(导出至Excel)
- 内置lambda表达式和正则表达式两种校验器
更新内容:
| Date | Version | Content | 
|---|---|---|
| V0.1.0 | 2022-7-29 | 初始版本 | 
快速开始
编写Pattern文档
- 导入规则编写
- 指定表格的工作表名称SheetName或者工作表序号SheetNumber,二者选一配置即可,SheetName优先,SheetNumber从0开始
- 指定开始行数SkipRow,这个是实际数据的开始行数,不包含表头行。在Sample中,这个行数为3
Sample:
"ExcelImport": {			// excel导入规则
    "SheetName": "",		// 工作表名称
    "SheetNumber": 0,       // 工作表序号
    "SkipRow": 3           // 开始行数
  }
- 导出规则编写
- 指定数据库表的名称,主键类型。数据库类型将在Cli参数中指定
Sample:
"DbExport": {               // Db导出规则
    "TableKeyType": "Guid", // 表主键类型 可选 "无","int","long","Guid",
    "TableName": "Employee" // 表名称
  }
- 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代码后生成可执行文件
运行
- 进入可执行文件所在目录,并运行
- 若要导出至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
- 等待程序执行完毕

结果
将在-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
- 从数据库导入
- ept带UI版本(WPF)
工具
- 此工具能将C#代码,转换成使用语法工厂构造器(SyntaxFactory)生成等效语法树代码
已知问题
作者信息
作者:林小
邮箱:jevonsflash@qq.com
License
The MIT License (MIT)
项目地址
ExcelPatternTool: Excel表格-数据库互导工具的更多相关文章
- go读取excel表格数据
		go读取excel表格数据 使用工具 github.com/Luxurioust/excelize 百度到的都是使用这个 实际上已经改名了 github.com/360EntSecGroup-Skyl ... 
- 根据excel表格中的内容更新Sql数据库
		关于[无法创建链接服务器 "(null)" 的 OLE DB 访问接口 SQL Server 2008读取EXCEL数据时,可能会报这个错误:无法创建链接服务器 "(nu ... 
- JXL解析Excel表格内容到数据库
		java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ... 
- 【游戏开发】Excel表格批量转换成CSV的小工具
		一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就 ... 
- 【游戏开发】Excel表格批量转换成lua的转表工具
		一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ... 
- 【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
		1.导入poi相关jar包 对于只操作2003及以前版本的excel,只需要导入poi-XXX.jar ,如果还需要对2007及以后版本进行操作,则需要导入 poi-ooxml-XXX.jar poi ... 
- jxl java工具类,导出excel,导入数据库
		1: 引入jxl jar 我使用的为maven管理, <!--Excel工具--> <dependency> <groupId>net.sourceforge.je ... 
- 数据库数据生成Excel表格(多用在导出数据)
		最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ... 
- Excel表格数据导入MySQL数据库
		有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ... 
随机推荐
- 谈谈最近玩的设计软件:Figma 与 Sketch
			谈谈最近玩的设计软件:Figma 与 Sketch 本文写于 2020 年 5 月 9 日 作为一个优秀的开发者,不懂设计是绝对不行的! 毕竟不懂设计的程序员不是好老板. 而做设计,早已不是尺规作图的 ... 
- Vue的computed和watch的使用和区别
			一.computed: 模板内表达式非常便利,可用于简单计算,当模板内放入太多的逻辑时,模板会过重且难以维护:可以使用computed替代 计算属性是基于它们的响应式依赖进行缓存的,当依赖的响应式数据 ... 
- intelij idea 好用的插件
			简介 记录一下平时使用的插件 Foldable ProjectView 隐藏目录或文件 One Dark theme 主题比较好用 Gitmoji Plus: Commit Button 在 comm ... 
- 前端CSS3动画animation用法
			前端CSS3动画animation用法 学习如下动画属性 @keyframes animation-name animation-duration animation-delay animation- ... 
- linux基本命令续(杂糅和转)
			此处使用CP 命令复制/etc/profile和/etc/init.d/network到家目录下,当然也可以指定其他目录如./ 根目录等. 在2提示处,如果输错了文字,可以ctrl+backspace ... 
- CVPR2022 | A ConvNet for the 2020s & 如何设计神经网络总结
			前言 本文深入探讨了如何设计神经网络.如何使得训练神经网络具有更加优异的效果,以及思考网络设计的物理意义. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟踪.经典论文解读.CV招聘 ... 
- docker 操作 记录
			docker ps #查看当前docker容器 docker exec -it 容器名称 sh 进入docker容器 docker stop 停止docker容器 
- 在Ubuntu系统下,可执行文件的表现形式
			在Windows系统下的可执行文件都带有.exe的后缀,而对于Linux系统下的可执行文件,则不会带有后缀,如下图 对于.txt文件,Ubuntu下也有相应的记事本程序打开,对于.xml,ubuntu ... 
- 【python基础】第08回 流程控制 for循环
			本章内容概要 1.循环结构之 for 循环 本章内容详解 1.循环结构之for循环 1.1 语法结构 for 变量名 in 可迭代对象: #字符串 列表 字典 元组 for 循环的循环体代码 针对变量 ... 
- 《HelloGitHub》第 75 期
			兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ... 
