{"id":20348693,"url":"https://github.com/jevonsflash/excelpatterntool","last_synced_at":"2025-08-20T01:31:59.893Z","repository":{"id":53583176,"uuid":"357271350","full_name":"jevonsflash/ExcelPatternTool","owner":"jevonsflash","description":"Excel表格-数据库互导工具","archived":false,"fork":false,"pushed_at":"2024-09-26T13:34:00.000Z","size":132719,"stargazers_count":48,"open_issues_count":1,"forks_count":14,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-09T06:40:48.618Z","etag":null,"topics":["excel","excel-export","excel-import","npoi","xls","xlsx"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jevonsflash.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-04-12T16:51:10.000Z","updated_at":"2024-11-08T14:29:41.000Z","dependencies_parsed_at":"2022-09-21T19:23:02.504Z","dependency_job_id":"8c20e37c-e4ce-4d7d-9be7-0ab4351ad8c3","html_url":"https://github.com/jevonsflash/ExcelPatternTool","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevonsflash%2FExcelPatternTool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevonsflash%2FExcelPatternTool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevonsflash%2FExcelPatternTool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevonsflash%2FExcelPatternTool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jevonsflash","download_url":"https://codeload.github.com/jevonsflash/ExcelPatternTool/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230382858,"owners_count":18216854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["excel","excel-export","excel-import","npoi","xls","xlsx"],"created_at":"2024-11-14T22:21:45.257Z","updated_at":"2024-12-19T05:08:16.719Z","avatar_url":"https://github.com/jevonsflash.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ExcelPatternTool\n\nExcel表格-数据库互导工具\n\n## 介绍\n指定Pattern文件-一个规则描述的json文档，基于此规则实现Excel表格与数据库之间的导入导出，校验等功能。使用场景有：Excel导入至数据库、Excel转Excel（合并，校验，规范化）、数据库导出至Excel（报表生成）等。\n\n本工具提供其他版本：\n\n[ExcelPatternTool with UI]( https://github.com/jevonsflash/ExcelPatternTool-UI)\n\n[ExcelPatternTool.Core]( https://github.com/jevonsflash/ExcelPatternTool/tree/master/ExcelPatternTool.Core)\n\n## 特点\n1. 小巧，轻量化的命令行工具\n2. 基于json文档的配置\n3. 支持Excel97-2003(xls)与Excel2007及以上(xlsx)格式\n4. 数据库支持SQL server、Sqlite、MySql\n5. 支持单元格注解，样式，公式的导出(导出至Excel)\n6. 内置lambda表达式和正则表达式两种校验器\n\n## 更新内容\n\n|  Date  |  Version   | Content                                                                                         |\n| :----: | :--------: | :---------------------------------------------------------------------------------------------- |\n| V0.1.0 | 2022-7-29  | 初始版本                                                                                        |\n| V0.1.1 |  2022-8-3  | 1. 新增数据库导入 2. 减小程序包体积                                                             |\n| V0.2.0 | 2023-10-19 | 1. 更新引用库，使用SixLabors.ImageSharp替换System.Drawing以兼容Linux 2. 升级项目框架到 .Net 7.0 |\n| V0.3.1 | 2023-10-24 | 修复部分错误 |\n| V0.3.2 | 2024-9-26 | 更新引用库，升级项目框架到 .Net 8.0 |\n\n## 快速开始\n\n### 编写Pattern文档\n\n1. 导入规则编写\n\n* 指定表格的工作表名称SheetName或者工作表序号SheetNumber，二者选一配置即可，SheetName优先，SheetNumber从0开始\n* 指定开始行数SkipRow，这个是实际数据的开始行数，不包含表头行。在Sample中，这个行数为3\n\nSample：\n```\n\"ExcelImport\": {\t\t\t// excel导入规则\n    \"SheetName\": \"\",\t\t// 工作表名称\n    \"SheetNumber\": 0,       // 工作表序号\n    \"SkipRow\": 3           // 开始行数\n  }\n```\n2. 导出规则编写\n* 指定数据库表的名称，主键类型。数据库类型将在Cli参数中指定\n\nSample：\n```\n\"DbExport\": {               // Db导出规则\n    \"TableKeyType\": \"Guid\", // 表主键类型 可选 \"无\"，\"int\"，\"long\"，\"Guid\"，\n    \"TableName\": \"Employee\" // 表名称\n  }\n```\n3. Pattern配置\n\n 对列进行配置\n\n * 列指定列标题名称，属性名称，类型和排序\n * 单元格类型为普通类型是\"常规\"时，直接输出的为单元格值，\"包含注解\"，\"包含样式\"，\"包含公式\"，\"全包含\"仅对导出至Excel有效\n* Ignore 为True时将忽略这一列，等效于无此列的Pattern设置\n* 列序号为此列在Excel中的编号，从0开始，即A列对应0，B列对应1 ...\n* 列属性类型PropType为bool时，可支持0，1，True，False\n\nSample：\n```\n\n\"Patterns\": [                       // Pattern配置\n    {\n      \"PropName\": \"EmployeeName\",   // 属性名称\n      \"HeaderName\": \"姓名\",         // 列标题名称\n      \"PropType\": \"string\",         // 属性类型，可选 \"string\"， \"DateTime\"，\"int\"，\"double\"，\"bool\"，\n      \"CellType\": \"常规\",           // 单元格类型 可选 \"常规\"，\"包含注解\"，\"包含样式\"，\"包含公式\"，\"全包含\"\n      \"Ignore\": false,              // 是否忽略\n      \"Order\": 0,                   // 列序号\n      \"Validation\": {               // 校验配置\n       ...\n      }\n    },\n```\n配置校验\n\n* 配置Target，可对单元格值或单元格公式进行校验\n* 普通校验器时，{value}占位符代表当前单元格值或公式的内容\n* Sample1为普通校验器，校验单元格数值，Sample2为正则校验器，校验单元格公式\n\nSample1：\n```  \n    \n      \"Validation\": {\n        \"Target\": \"单元格数值\",\n        \"Description\": \"整数值需要大于2\",\n        \"Convention\": \"普通校验器\",\n        \"Expression\": \"{value}\u003e=2\"\n      }\n    \n```\nSample2：\n```  \n    \n      \"Validation\": {\n        \"Target\": \"单元格公式\",\n        \"Description\": \"需要满足正则表达式\",\n        \"Convention\": \"正则表达式校验器\",\n        \"Expression\": \"^ROUND\\\\(AN\\\\d+\\\\+BC\\\\d+\\\\+BD\\\\d+\\\\+BE\\\\d+\\\\+BF\\\\d+\\\\+BG\\\\d+\\\\+BH\\\\d+,2\\\\)$\"\n      }\n    \n```\n\n完整示例请参考 [Sample](https://github.com/jevonsflash/ExcelPatternTool/raw/master/EPT/sample/pattern.json)\n\n### 安装\n\n不需要特别的安装，直接运行可执行文件即可\n* 直接下载\n，在此获取[ept.exe](https://github.com/jevonsflash/ExcelPatternTool/releases/download/v0.1.2/ExcelPatternTool.exe)，\n\n或\n```\ngit clone https://github.com/jevonsflash/ExcelPatternTool.git\n```\n\n```\ncd .\\ExcelPatternTool\n```\n```\ndotnet publish -p:PublishSingleFile=true -r win-x64 -c Release --self-contained true -p:EnableCompressionInSingleFile=true\n```\n\n\n代码后`生成`可执行文件\n```\nExcelPatternTool\\bin\\Release\\net6.0\\win-x64\\publish\\ExcelPatternTool.exe\n```\n\n### 运行\n1. 进入可执行文件所在目录，并运行\n* 若要导出至Sqlite，请确保相同目录下包含`e_sqlite3.dll`\n* 若要导出至SQL server，请确保相同录下包含`Microsoft.Data.SqlClient.SNI.dll`\n\n参数列表:\n\n| 参数  |    含义     | 用法                                                                                                                                                                                                  |\n| :---: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|  -p   | PatternFile | 指定一个Pattern文件(Json), 作为转换的模型文件                                                                                                                                                         |\n|  -i   |    Input    | 指定一个路径，或Sql连接字符串作为导入目标\u003cbr\u003e当指定 -s 参数为`sqlserver`, `sqlite`, `mysql`时，需指定为连接字符串;\u003cbr\u003e当指定 -s 参数为`excel`时，需指定为将要读取的Excel文件路径，支持Xls或者Xlsx文件 |\n|  -o   |   Output    | 指定一个路径，或Sql连接字符串作为导出目标\u003cbr\u003e当指定 -d 参数为`sqlserver`, `sqlite`, `mysql`时，需指定为连接字符串;\u003cbr\u003e当指定 -d 参数为`excel`时，需指定为将要另存的Excel文件路径，支持Xls或者Xlsx文件 |\n|  -s   |   Source    | 值为`excel`, `sqlserver`, `sqlite`或者`mysql`                                                                                                                                                         |\n|  -d   | Destination | 值为`excel`, `sqlserver`, `sqlite`或者`mysql`                                                                                                                                                         |\n|  -w   |  WaitAtEnd  | 指定时，程序执行完成后，将等待用户输入退出                                                                                                                                                            |\n|  -h   |    Help     | 查看帮助                                                                                                                                                                                              |\n\n\n导出至Sqlite的Sample\n```\n.\\ept.exe -p .\\sample\\pattern.json -i .\\sample\\test.xlsx -o \"Data Source=mato.db\" -s excel -d sqlite\n```\n导出至Excel的Sample\n```\n.\\ept.exe -p .\\sample\\pattern.json -i .\\sample\\test.xlsx -o .\\sample\\output.xlsx -s excel -d excel\n```\n\n2. 等待程序执行完毕\n![ss1](./EPT/screenshots/1.png)\n\n### 结果\n\n将在-o 参数指定的地址生成数据\n生成至Excel\n\n![ss1](./EPT/screenshots/2.png)\n\n\n生成至Sqlite\n\n![ss1](./EPT/screenshots/3.png)\n\n\n## 其他\n### 配置\n\nept.exe 相同目录下新建`appsettings.json`可自定义配置，若无此文件将采用自定义样式配置，如下：\n\n```\n{\n  \"HeaderDefaultStyle\": {\n    \"DefaultFontName\": \"宋体\",\n    \"DefaultFontColor\": \"#FFFFFF\",\n    \"DefaultFontSize\": 10,\n    \"DefaultBorderColor\": \"#000000\",\n    \"DefaultBackColor\": \"#888888\"\n  },\n  \"BodyDefaultStyle\": {\n    \"DefaultFontName\": \"宋体\",\n    \"DefaultFontColor\": \"#000000\",\n    \"DefaultFontSize\": 10,\n    \"DefaultBorderColor\": \"#000000\",\n    \"DefaultBackColor\": \"#FFFFFF\"\n  },\n  \"CellComment\": {\n    \"DefaultAuthor\": \"Linxiao\"\n\n  }\n}\n```\n### 可扩展性\n\n检验提供类ValidatorProvider类具有一定的扩展功能，\nInitConventions方法对校验行为进行初始化，默认提供RegularExpression，LambdaExpression对应的委托函数分别实现了正则表达式校验和普通表达式校验，重写InitConventions可实现一个自定义方式校验\n\nSample：\n\n```\npublic override Dictionary\u003cstring, ValidateConvention\u003e InitConventions()\n{\n\n    var defaultConventions = base.InitConventions();\n    //x 为当前列轮询的字段规则PatternItem对象，\n    //e 为当前行轮询的Entity对象\n    //返回ProcessResult作为校验结果\n    defaultConventions.Add(\"MyExpression\", new ValidateConvention((x, e) =\u003e\n    {\n        //再此编写自定义校验功能\n        //可用 x.PropName（或PropertyTypeMaper(x.PropName)） 获取当前列轮询的字段（Excel表头）名称\n        //返回ProcessResult作为校验结果,IsValidated设置为true表示校验通过\n        x.Validation.ProcessResult.IsValidated = true;\n        return x.Validation.ProcessResult;\n    }));\n\n    return defaultConventions;\n}\n```\n## Todo\n\n- [x] 从数据库导入\n- [x] ept带UI版本 [前往WPF版]( https://github.com/jevonsflash/ExcelPatternTool-UI)\n- [ ] 校验过程的忽略与单独使用\n\n\n## 工具\n\n[Roslyn Syntax Tool](https://github.com/jevonsflash/RoslynSyntaxTool)\n\n* 此工具能将C#代码，转换成使用语法工厂构造器（SyntaxFactory）生成等效语法树代码\n\n\n## 已知问题\n\n\n\n## 作者信息\n\n作者：林小\n\n邮箱：jevonsflash@qq.com\n\n\n\n## License\n\nThe MIT License (MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjevonsflash%2Fexcelpatterntool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjevonsflash%2Fexcelpatterntool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjevonsflash%2Fexcelpatterntool/lists"}