{"id":15644990,"url":"https://github.com/owent/xresconv-gui","last_synced_at":"2025-04-09T16:17:46.732Z","repository":{"id":1945564,"uuid":"35724050","full_name":"owent/xresconv-gui","owner":"owent","description":"批量转表工具的GUI版本，依赖electron","archived":false,"fork":false,"pushed_at":"2024-11-20T02:30:49.000Z","size":34538,"stargazers_count":58,"open_issues_count":1,"forks_count":22,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-09T16:17:38.925Z","etag":null,"topics":["electron","excel","gui","nodejs","xls","xlsx","xresconv-conf","xresconv-gui","xresloader"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/owent.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-05-16T13:07:28.000Z","updated_at":"2024-11-20T02:30:47.000Z","dependencies_parsed_at":"2024-03-29T18:13:55.489Z","dependency_job_id":"3d81c202-e5ba-41ea-9bf9-1e05b3e2a94e","html_url":"https://github.com/owent/xresconv-gui","commit_stats":{"total_commits":141,"total_committers":4,"mean_commits":35.25,"dds":0.5886524822695036,"last_synced_commit":"a1fdff61fcc3ebc5b4262ec22188d6ddc815d4dc"},"previous_names":["owent/xresconv-gui","xresloader/xresconv-gui"],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owent%2Fxresconv-gui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owent%2Fxresconv-gui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owent%2Fxresconv-gui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owent%2Fxresconv-gui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/owent","download_url":"https://codeload.github.com/owent/xresconv-gui/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248065282,"owners_count":21041872,"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":["electron","excel","gui","nodejs","xls","xlsx","xresconv-conf","xresconv-gui","xresloader"],"created_at":"2024-10-03T12:03:54.591Z","updated_at":"2025-04-09T16:17:46.700Z","avatar_url":"https://github.com/owent.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xresconv-gui\r\n\r\n[ci-github-action]: https://github.com/xresloader/xresconv-gui/workflows/build/badge.svg\r\n![ci-github-action]\r\n\r\n这是一个符合 [xresconv-conf](https://github.com/xresloader/xresconv-conf) 规范的GUI转表工具，并且使用 [xresloader](https://github.com/xresloader/xresloader) 作为数据导出工具后端。\r\n\r\n本项目基于 [Electron](http://electron.atom.io/) 项目，所以支持[Electron](http://electron.atom.io/)支持得所有平台（Linux、macOS和Windows）\r\n\r\n## 下载和使用\r\n\r\n点击[此处](https://github.com/xresloader/xresconv-gui/releases)并根据需要下载对应系统的包，直接执行里面的二进制即可。\r\n\r\n### 启动参数\r\n\r\n+ `--input \u003c文件名\u003e` : 指定初始的转表清单文件。\r\n+ `--debug-mode` : 开启debug模式并启动开发人员工具。\r\n+ `--custom-selector/--custom-button \u003cjson文件名\u003e` : 增加自定义选择器,允许多个\r\n+ `--log-configure \u003clog设置文件 json文件名\u003e` : 设置额外的log配置。设置文件结构请参见: https://www.npmjs.com/package/log4js\r\n\r\n### 自定义选择器规则\r\n\r\n文件必须是UTF-8编码\r\n\r\n```json\r\n{\r\n    \"name\": \"选择器按钮名称\",                           // [必须] 按钮显示名称\r\n    \"by_schemes\": [{                                    // [必须] item里配置file和scheme属性的选取规则（by_schemes和by_sheets里至少要配置一个）\r\n        \"file\": \"文件名, 比如: 资源转换示例.xlsx\",      // [必须]\r\n        \"scheme\": \"转表规则名, 比如: scheme_upgrade\"    // [可选] 此项可以为空，如果为空会命中所有file匹配的条目\r\n    }],\r\n    \"by_sheets\": [{                                     // [必须] item里的DataSource子节点配置DataSource的选取规则（by_schemes和by_sheets里至少要配置一个）\r\n        \"file\": \"文件名, 比如: 资源转换示例.xlsx\",      // [必须]\r\n        \"sheet\": \"文件名, 比如: arr_in_arr\"             // [可选] 此项可以为空，如果为空会命中所有DataSource中第一个选项和file匹配的条目\r\n    }],\r\n    \"default_selected\": false,                          // [可选] 默认选中\r\n    \"style\": \"outline-secondary\",                       // [可选] 按钮Style。默认: outline-secondary\r\n    // \"action\": [\"unselect_all\", \"reload\"]             // [可选] 特殊行为，具体内容请参考下面的文档。\r\n}\r\n```\r\n\r\n以上 `file` 、 `scheme` 、 `sheet` 字段都支持 `完全匹配的名称` 、 `glob: 通配符` 和 `regex: 正则表达式` 三种形式。\r\n按钮风格默认是 `outline-secondary` 。可选项为(详见: https://getbootstrap.com/docs/5.0/components/buttons/):\r\n\r\n+ outline-primary\r\n+ outline-secondary\r\n+ outline-success\r\n+ outline-danger\r\n+ outline-warning\r\n+ outline-info\r\n+ outline-light\r\n+ outline-dark\r\n+ primary\r\n+ secondary\r\n+ success\r\n+ danger\r\n+ warning\r\n+ info\r\n+ light\r\n+ dark\r\n\r\n\u003e Sample: 使用 [doc/custom-selector.json](doc/custom-selector.json) 和 https://github.com/xresloader/xresconv-conf/blob/master/sample.xml 里的配置，可以使用 `--custom-selector doc/custom-selector.json` 来启动。\r\n\r\n特殊行为 **action** 字段的特殊功能:\r\n\r\n+ `reload` : 重新加载自定义按钮\r\n+ `select_all` : 全部选中\r\n+ `unselect_all` : 全部反选\r\n+ `script: \u003c脚本名字\u003e` : 执行脚本，**脚本名字** 为 `//root/gui/script` 节点的 `name` 属性。\r\n\r\n## 示例\r\n\r\n![示例截图-1](doc/snapshoot-1.gif)\r\n\r\n![示例截图-2](doc/snapshoot-2.gif)\r\n\r\n![示例截图-3](doc/snapshoot-4.png)\r\n\r\n自定义按钮启动示例: `./xresconv-gui.exe --custom-selector ./doc/custom-selector.json`\r\n\r\n## 注意事项\r\n\r\n1. 文件名最好全英文，因为GUI工具中的编码统一使用UTF-8，而Windows默认编码是GBK。如果转表工具也使用UTF-8的话Windows下会找不到中文文件名。\r\n\r\n## 事件支持\r\n\r\n2.1.0 版本开始增加了事件支持。事件格式如下：\r\n\r\n```xml\r\n\u003cgui\u003e\r\n    \u003cset_name description=\"设置转表项的名字字段，每个转表项会调用一次\"\u003e\r\n        // 事件代码脚本\r\n    \u003c/set_name\u003e\r\n    \u003con_before_convert \r\n        name=\"事件名称(可选,如果设置了名称，可以在执行时选择是否关闭)\" \r\n        checked=\"true/false(可选,默认是否选中/启用)\" \r\n        mutable=\"true/false(可选,是否可修改选中/启用状态)\" \r\n        type=\"text/javascript\" timeout=\"超时时间（毫秒,默认: 30000）\" description=\"开始转表前的事件回调函数，事件执行结束必须调用done()函数，以触发进行下一步\"\u003e\r\n        \r\n    \u003c/on_before_convert\u003e\r\n    \u003con_after_convert \r\n        name=\"事件名称(可选,如果设置了名称，可以在执行时选择是否关闭)\" \r\n        checked=\"true/false(可选,默认是否选中/启用)\" \r\n        mutable=\"true/false(可选,是否可修改选中/启用状态)\"\r\n        type=\"text/javascript\" timeout=\"超时时间（毫秒,默认: 30000）\" description=\"转表结束后的事件回调函数，事件执行结束必须调用done()函数，以触发进行下一步\"\u003e\r\n        // 事件代码脚本\r\n    \u003c/on_after_convert\u003e\r\n    \u003cscript name=\"自定义脚本\" type=\"text/javascript\" timeout=\"超时时间（毫秒,默认: 30000）\"\u003e\r\n        // 同上\r\n        alert_warning(\"自定义脚本，可用于自定义按钮\");\r\n        resolve();\r\n    \u003c/script\u003e\r\n\u003c/gui\u003e\r\n```\r\n\r\n\u003e 注: 事件的 `name` 、 `checked` 、 `mutable` 和自定义脚本的 `\u003cscript\u003e\u003c/script\u003e` 标签需要版本 **\u003e=2.3.0** 。\r\n\r\n### **set_name** 事件\r\n\r\n**set_name** 事件用户自定义修改转表结构树的显示，可用的接口如下:\r\n\r\n```javascript\r\n{\r\n    work_dir: \"当前配置下的执行xresloader的工作目录\",\r\n    configure_file: \"当前配置XML路径\",\r\n    item_data: {\r\n        id: id,\r\n        file: \"数据源文件\",\r\n        scheme: \"数据源scheme表名\",\r\n        name: \"描述名称\",\r\n        cat: \"分类名称\",\r\n        options: [\"额外选项\"],\r\n        desc: \"描述信息\",\r\n        scheme_data: {\"元数据Key\": \"元数据Value\"},\r\n        tags: [\"tag列表\"],     // 版本 \u003e= 2.2.3\r\n        classes: [\"class列表\"] // 版本 \u003e= 2.2.3\r\n    },\r\n    data: {}， // 绑定在事件上的私有数据,可用于保存全局状态, 版本 \u003e= 2.3.0\r\n    alert_warning: function(content, title, options) {}, // 警告弹框， options 结构是 {yes: 点击是按钮回调, no: 点击否按钮回调, on_close: 关闭后回调}\r\n    alert_error: function(content, title) {}, // 错误弹框\r\n    log_info: function (content) {}, // 打印info日志\r\n    log_notice: function (content) {}, // 打印notice日志, 版本 \u003e= 2.3.0\r\n    log_warning: function (content) {}, // 打印warning日志, 版本 \u003e= 2.3.0\r\n    log_error: function (content) {}, // 打印error日志\r\n}\r\n```\r\n\r\n### **on_before_convert/on_after_convert** 事件\r\n\r\n**on_before_convert/on_after_convert** 事件用于控制转表前操作和转表后操作，会按顺序执行。可用的接口如下:\r\n\r\n```javascript\r\n{\r\n    work_dir: \"执行xresloader的工作目录\",\r\n    xresloader_path: \"xresloader目录\",\r\n    global_options: {\"全局选项\": \"VALUE\"},\r\n    selected_nodes: [\"选中要执行转表的节点集合\"],\r\n    selected_items: [\"选中要执行转表的item对象集合,数据结构同上面的 item_data\"], // 版本 \u003e= 2.2.3\r\n    run_seq: \"执行序号\",\r\n    data: {}， // 绑定在事件上的私有数据,可用于保存全局状态, 版本 \u003e= 2.3.0\r\n    alert_warning: function(content, title, options) {}, // 警告弹框， options 结构是 {yes: 点击是按钮回调, no: 点击否按钮回调, on_close: 关闭后回调}\r\n    alert_error: function(content, title) {}, // 错误弹框\r\n    log_info: function (content) {}, // 打印info日志\r\n    log_notice: function (content) {}, // 打印notice日志, 版本 \u003e= 2.3.0\r\n    log_warning: function (content) {}, // 打印warning日志, 版本 \u003e= 2.3.0\r\n    log_error: function (content) {}, // 打印error日志\r\n    resolve: function (value) {}, // 通知上层执行结束,相当于Promise的resolve\r\n    reject: function(reason) {}, // 通知上层执行失败,相当于Promise的reject\r\n    require: function (name) {} // 相当于 nodejs的 require(name) 用于导入nodejs 模块\r\n}\r\n```\r\n\r\n### 自定义脚本 **script**\r\n\r\n在自定义脚本 **script** 中，可用的接口如下:\r\n\r\n```javascript\r\n{\r\n    work_dir: \"执行xresloader的工作目录\",\r\n    xresloader_path: \"xresloader目录\",\r\n    global_options: {\"全局选项\": \"VALUE\"},\r\n    selected_nodes: [\"选中要执行转表的节点集合\"],\r\n    selected_items: [\"选中要执行转表的item对象集合,数据结构同上面的 item_data\"],\r\n    data: {}， // 绑定在按钮上的私有数据,可用于保存全局状态\r\n    alert_warning: function(content, title, options) {}, // 警告弹框， options 结构是 {yes: 点击是按钮回调, no: 点击否按钮回调, on_close: 关闭后回调}\r\n    alert_error: function(content, title) {}, // 错误弹框\r\n    log_info: function (content) {}, // 打印info日志\r\n    log_notice: function (content) {}, // 打印notice日志\r\n    log_warning: function (content) {}, // 打印warning日志\r\n    log_error: function (content) {}, // 打印error日志\r\n    resolve: function (value) {}, // 通知上层执行结束,相当于Promise的resolve\r\n    reject: function(reason) {}, // 通知上层执行失败,相当于Promise的reject\r\n    require: function (name) {} // 相当于 nodejs的 require(name) 用于导入nodejs 模块\r\n}\r\n```\r\n\r\n### **on_append_log** 事件\r\n\r\n日志Hook回调 **on_append_log** 事件（2.5.0 版本开始）用于抓取和控制日志输出。可用的接口如下：\r\n\r\n{\r\n    work_dir: \"执行xresloader的工作目录\",\r\n    xresloader_path: \"xresloader目录\",\r\n    global_options: {\"全局选项\": \"VALUE\"},\r\n    selected_nodes: [\"选中要执行转表的节点集合\"],\r\n    selected_items: [\"选中要执行转表的item对象集合,数据结构同上面的 item_data\"],\r\n    data: {\r\n        message: \"原始日志正文\",\r\n        module_name: \"模块名，可能为空\",\r\n        style: \"输出格式\", // alert-primary, alert-secondary, alert-warning, alert-danger, alert-compact\r\n    }， // 绑定在按钮上的私有数据,可用于保存全局状态\r\n    alert_warning: function(content, title, options) {}, // 警告弹框， options 结构是 {yes: 点击是按钮回调, no: 点击否按钮回调, on_close: 关闭后回调}\r\n    alert_error: function(content, title) {}, // 错误弹框\r\n    log_info: function (content) {}, // 打印info日志\r\n    log_notice: function (content) {}, // 打印notice日志\r\n    log_warning: function (content) {}, // 打印warning日志\r\n    log_error: function (content) {}, // 打印error日志\r\n    require: function (name) {} // 相当于 nodejs的 require(name) 用于导入nodejs 模块\r\n}\r\n\r\n此接口可以通过修改 `data` 内的数据修改输出的日志内容和样式。但是此接口不会排队执行。\r\n\r\n## 开发使用说明\r\n\r\n以下内容仅是对这个工具的开发和维护进行说明，直接使用的话[下载预发布包](https://github.com/xresloader/xresconv-gui/releases)即可\r\n\r\n### 环境准备\r\n\r\n1. 请自行安装node.js和npm（详见：\u003chttps://nodejs.org\u003e ）\r\n\r\n```bash\r\n# 基本组件安装\r\nnpm install -g yarn\r\nyarn install\r\n\r\n# 开发环境安装\r\nyarn install --dev\r\nyarn install -g gulp-cli\r\n\r\n# 升级依赖包\r\nnpm install -g ncu\r\nncu\r\nncu -u\r\n```\r\n\r\n### 直接启动\r\n\r\n```bash\r\nyarn run start\r\n```\r\n\r\n### 调试模式启动\r\n\r\n```bash\r\nyarn run debug-start\r\n```\r\n\r\n### VSCode调试启动\r\n\r\n先使用设定调试端口并启动\r\n\r\n```bash\r\nyarn run debug\r\n```\r\n\r\n然后VSCode打开调试面板Attach到进程上\r\n\r\n直接VSCode Lanch调试的方法见: \u003chttps://electronjs.org/docs/tutorial/debugging-main-process-vscode\u003e\r\n\r\n\u003e *VSCode里直接Launch的方式仅在Windows下有效*\r\n\r\n**注：VSCode连接成功后，会立刻断点在程序启动处，这时候可以对需要断点的地方打断点，然后直接继续即可。**\r\n\r\n## 打包和发布\r\n\r\n+ 打包发布所有x64架构\r\n\r\n\u003e `yarn run package`\r\n\r\n+ 打包发布所有平台\r\n\r\n\u003e `yarn run package-all`\r\n\r\n## 关于加载和调试\r\n\r\n本软件中大部分的外部库加载都没有问题，但是由于默认走的是node.js的沙箱机制，所以html内的script标签里某些库不会写出到全局。这时候需要手动加一下，比如：\r\n\r\n```javascript\r\nwindow.jQuery = require(`${__dirname}/lib/jquery/jquery.min.js`);\r\n```\r\n\r\n另外，调试模式运行只能调试[Electron](http://electron.atom.io/)进入的代码。\r\n无法调试[Electron](http://electron.atom.io/)中[BrowserWindow](http://electron.atom.io/docs/api/browser-window/)的沙箱里的代码。\r\n所以如果要调试[BrowserWindow](http://electron.atom.io/docs/api/browser-window/)内的代码还是要在[src/setup.js](src/setup.js)中把***debug***选项改为true。\r\n\r\n## 关于NPM下载加速\r\n\r\n1. 关闭npm的https\r\n\r\n\u003e `npm config set strict-ssl false`\r\n\r\n2. 设置npm的软件源\r\n\r\n\u003e `npm config set registry http://registry.npmjs.org/`\r\n\u003e `npm config set registry https://mirrors.tencent.com/npm/`\r\n\u003e `npm config set registry https://registry.npm.taobao.org/`\r\n\u003e `npm install -g cnpm --registry=https://registry.npm.taobao.org`\r\n\r\n3. 代理\r\n\r\n\u003e + 设置代理： `npm config set proxy=http://代理服务器ip:代理服务器端口`\r\n\u003e + 取消代理： `npm config delete http-proxy`\r\n\u003e + 取消代理： `npm config delete https-proxy`\r\n\u003e + 单独设置代理： `npm install --save-dev electron-prebuilt --proxy http://代理服务器ip:代理服务器端口`\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowent%2Fxresconv-gui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowent%2Fxresconv-gui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowent%2Fxresconv-gui/lists"}