{"id":13545758,"url":"https://github.com/o2team/xcel","last_synced_at":"2025-04-05T06:08:09.114Z","repository":{"id":76125503,"uuid":"73879507","full_name":"o2team/xcel","owner":"o2team","description":"一个基于 Electron 和 Vue 的 Excel 数据过滤工具——凹凸实验室出品 https://aotu.io/notes/2016/11/15/xcel/","archived":false,"fork":false,"pushed_at":"2018-06-23T12:12:13.000Z","size":758,"stargazers_count":667,"open_issues_count":4,"forks_count":100,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-03-29T05:08:14.268Z","etag":null,"topics":["electron","electron-vue","excel-filter","excel-tool","xcel"],"latest_commit_sha":null,"homepage":null,"language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/o2team.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2016-11-16T03:19:41.000Z","updated_at":"2025-02-28T02:18:50.000Z","dependencies_parsed_at":"2023-02-25T05:30:35.836Z","dependency_job_id":null,"html_url":"https://github.com/o2team/xcel","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2team%2Fxcel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2team%2Fxcel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2team%2Fxcel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o2team%2Fxcel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/o2team","download_url":"https://codeload.github.com/o2team/xcel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247294539,"owners_count":20915340,"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","electron-vue","excel-filter","excel-tool","xcel"],"created_at":"2024-08-01T11:01:14.950Z","updated_at":"2025-04-05T06:08:09.096Z","avatar_url":"https://github.com/o2team.png","language":"Vue","funding_links":[],"categories":["Vue"],"sub_categories":[],"readme":"# XCEL - An Ultimate EXCEL Data Filter\n\nXCEL 是由京东用户体验设计部 [凹凸实验室][1] 推出的一个 Excel 数据清洗工具，其通过可视化的方式让用户轻松地对 Excel 数据进行筛选。整个数据筛选处理过程利用 NodeJS 强大的异步处理功能，让你彻底告别在 Excel 里面自己写宏函数的卡顿、没响应的原始方式！\n\n下载试用： \n\n - MacOS：[点击下载][2] \n - Windows：[64bit版本][3]  [32bit 版本][4]\n - Linux：[点击下载][5]\n\n落地页：https://xcel.aotu.io/ ✨✨✨   \n项目总结：https://aotu.io/notes/2016/11/15/xcel/ ✨✨✨\n\n## 功能特色\n\n1. 体验佳：该工具基于 Electron 开发，使其拥有了很多原生特性，如与系统一致的弹框、无边框设计等等。\n2. 可视化：可视化操作你的 Excel 数据，支持文件的导入导出。\n3. 强大的筛选逻辑：提供了单列运算逻辑、多列运算逻辑和双列范围逻辑三种筛选方式，并且可通过“且”、“或”和“编组”的方式任意组合。\n4. 去重功能：提供可指定列的方式进行去重，有效避免数据冗余。\n\n\n## 截图\n1. 初始界面  \n![初始界面][6]\n2. 筛选条件面板\n![筛选条件面板][7]\n3. 历史文件列表  \n![历史文件列表][8]\n4. 使用说明  \n![使用说明][9]\n5. 应用更新\n![应用更新][10]\n\n## 感谢\n\n特别感谢 [@mamboer](https://github.com/mamboer)、[@JChehe](https://github.com/JChehe)、[@hankaibo](https://github.com/hankaibo) 对此项目作出贡献💯。\n\n欢迎大家下载试用，当然更希望你们推荐给有需要的人。如果该工具没涵盖到你的筛选需求，可以进行反馈，我们会根据情况适时增加进来。   \n\n## 开源许可证\n\n[GPL](https://github.com/o2team/xcel/blob/master/LICENSE)\n\n---\n\n## 开发者\n\n### 模块说明\n\n#### 两个 package.json 的结构\n \n 1. 对于开发（./package.json）  \n该 `package.json` 存在于项目的根目录。它描述了开发环境和构建命令（build scripts），即 `devDependencies`。\n\n 2. 对于应用  \n该 `package.json` 存在于 `app` 目录下。它描述了应用的依赖（即 `depencencies`）。只有该目录是最终会被打包生成程序。\n\n### 运行环境\n\nXCEL 推荐使用 node v6.x 作为编译运行环境。另外，构建工具使用了 Webpack。\n\n### 构建步骤\n该项目是基于 [electron-vue][11] 开发，该模板的更多信息可以 [点击这里][12] 查看。\n```\n# install dependencies\nnpm install\n\n# serve with hot reload at localhost:9080\nnpm run dev\n\n# build electron app for production\nnpm run build\n\n# run webpack in production\nnpm run pack\n```\n\n更多构建信息可点击 [这里][13] 查看。\n\n### 初始化项目时可能会遇到的问题\n\n- 安装 electron 包过慢（国内情况）的解决方法：\n - 临时方式：\n `DEBUG=* ELECTRON_MIRROR=\"https://npm.taobao.org/mirrors/electron/\" npm install electron`    \n加入DEBUG=*是为了查看调试信息，确认下载源是否替换成功。\n - 永久方式：给环境变量文件(.zshrc/.bashrc)加入环境变量值（前者对应zsh，后者是bash，根据自己的实际情况）\n `export ELECTRON_MIRROR=\"https://npm.taobao.org/mirrors/electron/\"`   \n另外某些情况下会出现安装包下载不完整导致electron安装失败的原因，可以尝试清除electron缓存。  \n缓存的默认地址在：``$HOME/.electron``   \n通过添加ELECTRON_CUSTOM_DIR可以自定义缓存目录，方法同上。\n- node-sass\n```\nERROR in dlopen(/Users/**/Desktop/XCel/node_modules/node-sass/vendor/darwin-x64-48/binding.node, 1): no suitable image found.  Did find:\n            /Users/**/Desktop/XCel/node_modules/node-sass/vendor/darwin-x64-48/binding.node: truncated mach-o error: segment __TEXT extends to 1212416 which is past end of file 260668\n          @ ./~/vue-style-loader!./~/css-loader!./~/vue-loader/lib/style-rewriter.js!./~/sass-loader!./~/vue-loader/lib/selector.js?type=style\u0026index=0!./app/src/App.vue 4:14-240 13:2-17:4 14:20-246\n```\n\n解决方法：`npm rebuild node-sass`\n\n如果你还遇到其他构建问题，欢迎反馈，我会及时更新到此处。\n\n### 一些有助于理解程序的图例\n\n1. Vue 组件结构  \n  ![Vue 组件结构][14]  \n2. Vuex 数据结构  \n  ![Vuex 数据结构][15]  \n3. 解析 Excel 后的数据结构（在 Background Process 中）  \n  ![解析 Excel 后的数据结构][16]  \n4. 项目的文件结构  \n```\n.  \n├── README.md  \n├── app················································应用的代码目录  \n│   ├── crashTempate.js································应用崩溃时提交的日志信息  \n│   ├── dist···········································应用构建后的代码目录  \n│   │   ├── background·································  \n│   │   │   ├── excelUtils.js··························  \n│   │   │   ├── filterUtils.js·························  \n│   │   │   ├── generateHTMLString.js··················  \n│   │   │   ├── index.html·····························  \n│   │   │   └── index.js·······························  \n│   │   └── update·····································  \n│   │       ├── index.css······························  \n│   │       ├── index.html·····························  \n│   │       └── index.js·······························  \n│   ├── electron.js····································electron 入口文件（Main Process）  \n│   ├── icons··········································electron-packager 打包时所需的应用图标  \n│   │   ├── icon.icns··································.icns \u003c--\u003e OSX  \n│   │   ├── icon.ico···································.ico  \u003c--\u003e Windows  \n│   │   └── icon.png···································.png  \u003c--\u003e 可选项  \n│   ├── ipcMainSets.js·································IPC通讯：主进程  \n│   ├── main.ejs·······································页面入口  \n│   ├── menuTemplate.js································应用的菜单栏  \n│   ├── node_modules···································应用层级的 node_modules  \n│   ├── package.json···································应用层级的 package.json（如 Lodash）  \n│   └── src············································Vue 相关的目录   \n│       ├── App.vue····································单页面的主结构  \n│       ├── api········································所有 API 请求（目前为空）  \n│       ├── background·································Backgroud Process（Renderer Process）用于处理耗时的操作  \n│       │   ├── excelUtils.js··························excel 相关的工具函数集合  \n│       │   ├── filterUtils.js·························过滤相关的工具函数集合  \n│       │   ├── generateHTMLString.js··················根据excel数据生成相应的 HTML 字符串  \n│       │   ├── index.html·····························Background Process 入口文件  \n│       │   └── index.js·······························Background Process 入口 JavaScript 文件  \n│       ├── components·································组件目录  \n│       │   ├── FirstScreenPageView····················首屏的组件目录  \n│       │   │   ├── ColSelDialog.vue···················列选择弹框组件  \n│       │   │   ├── ExcelDisplay.vue···················Excel 展示组件  \n│       │   │   ├── FilterForUnique.vue················去重逻辑表单组件  \n│       │   │   ├── FilterFormDoubleColsRange.vue······双列范围逻辑表单组件  \n│       │   │   ├── FilterFormMultiCalc.vue············多列运算逻辑表单组件  \n│       │   │   ├── FilterFormSingleLogic.vue··········单列运算逻辑表单组件  \n│       │   │   ├── FilterPanel.vue····················过滤面板组件  \n│       │   │   ├── FilterTag.vue······················过滤标签组件  \n│       │   │   ├── FilterTagList.vue··················过滤标签列组件  \n│       │   │   ├── GroupSelect.vue····················组别选择组件  \n│       │   │   ├── SheetOfExcel.vue···················Excel 的 sheet 组件  \n│       │   │   └── uniqueTag.vue······················去重逻辑表单组件  \n│       │   ├── FirstScreenPageView.vue················首屏页面结构组件  \n│       │   ├── InstructionsPageView···················使用说明组件目录  \n│       │   │   ├── Instructions.vue···················使用说明组件  \n│       │   │   └── assets·····························静态资源  \n│       │   │       └── qrcode.jpg·····················二维码图片  \n│       │   ├── InstructionsPageView.vue···············使用说明页面结构   \n│       │   ├── assets·································静态资源   \n│       │   │   ├── O2-icon.png························O2 图标   \n│       │   │   ├── common.scss························通用 CSS 样式   \n│       │   │   ├── content.scss·······················使用说面页面的 CSS 样式   \n│       │   │   ├── markdown.scss······················markdown 的 CSS 样式   \n│       │   │   ├── o2logo.png·························O2 logo  \n│       │   │   ├── select.scss························下拉选择框的 CSS 样式  \n│       │   │   ├── svg································SVG 图标目录  \n│       │   │   ├── table.scss·························table 相关的 CSS 样式  \n│       │   │   ├── tabs.scss··························Excel 的 Tabs(sheets) CSS 样式  \n│       │   │   └── xcel_logo.png······················xcel Logo  \n│       │   └── common·································可复用的组件目录  \n│       │       ├── FileList.vue·······················文件列表组件  \n│       │       ├── Footer.vue·························底部组件  \n│       │       ├── Header.vue·························头部组件  \n│       │       ├── Loading.vue························文件处理时的 Loading 组件  \n│       │       ├── SideBar.vue························侧边栏组件  \n│       │       ├── UpdateDialog.vue···················应用更新弹框组件  \n│       │       └── WindowTop.vue······················顶部控制条组件  \n│       ├── main.js····································Vue 入口文件  \n│       ├── routes.js··································Vue 路由文件  \n│       ├── store······································Vuex 数据目录  \n│       │   ├── actions.js·····························涉及多个 mutations 的 action 集合  \n│       │   ├── getters.js·····························涉及多个 mutations 的 getter 集合  \n│       │   ├── index.js·······························Vuex 入口文件   \n│       │   ├── modules································模块目录  \n│       │   │   ├── clientUpdate.js····················应用更新相关的模块  \n│       │   │   ├── excel.js···························Excel 相关的模块  \n│       │   │   ├── file.js····························文件相关的模块  \n│       │   │   ├── filter.js··························过滤相关的模块  \n│       │   │   ├── programWindow.js···················应用窗口的控制模块（如最大化、最小化）  \n│       │   │   └── unique.js··························去重相关的模块  \n│       │   └── mutation-types.js······················mutation-types 声明  \n│       ├── update·····································应用更新的页面（Renderer Procss）  \n│       │   ├── index.css······························  \n│       │   ├── index.html·····························  \n│       │   └── index.js·······························  \n│       └── utils······································工具函数目录  \n│           ├── ExcelSet.js····························Excel 相关的工具函数  \n│           ├── appInfo.js·····························应用相关的信息  \n│           ├── localStorageSet.js·····················本地存储的工具函数  \n│           └── openExternal.js························通过默认浏览器打开外链的工具函数  \n├── build··············································electron-builder 生成安装包时所需文件（如图标、背景图）  \n│   ├── background.png·································Mac 安装时显示的背景图  \n│   ├── icon.icns······································OSX 应用图标  \n│   ├── icon.ico·······································  \n│   ├── install-spinner.gif····························Windons 安装时显示的 GIF 动画  \n│   ├── installerHeader································  \n│   └── installerHeaderIcon.ico························  \n├── builds·············································electron-packager 打包出来的各平台应用  \n│   ├── XCel-darwin-x64································macOS 64位  \n│   ├── XCel-linux-ia32································Linux 32位  \n│   ├── XCel-linux-x64·································Liunx 64位  \n│   ├── XCel-mas-x64···································苹果应用商店（Mac App Store）的 安装包  \n│   ├── XCel-win32-ia32································Windows 32位  \n│   └── XCel-win32-x64·································windows 64位  \n├── config.js··········································Electron 构建时的配置文件  \n├── node_modules·······································Electron 层级的 node_modules  \n├── package.json·······································Electron 层级的 package.json  \n├── tasks··············································预定义的任务集（如快速新建 Vue 组件等）  \n│   ├── release.js·····································  \n│   ├── runner.js······································  \n└── webpack.config.js··································webpack 配置文件  \n```\n\n\n  [1]: https://aotu.io/\n  [2]: http://jdc.jd.com/lab/xcel/download/1.4.0/xcel-1.4.0.dmg\n  [3]: http://jdc.jd.com/lab/xcel/download/1.4.0/xcel%20Setup%201.4.0.exe\n  [4]: http://jdc.jd.com/lab/xcel/download/1.4.0/xcel%20Setup%201.4.0-ia32.exe\n  [5]: http://jdc.jd.com/lab/xcel/download/1.4.0/xcel-1.4.0-linux-x64.zip\n  [6]: https://misc.aotu.io/JChehe/xcel/initial_interface.png\n  [7]: https://misc.aotu.io/JChehe/xcel/filter_panel.png\n  [8]: https://img20.360buyimg.com/ling/jfs/t22597/14/386141808/20464/fd4ff229/5b2e352dN367d79d8.png\n  [9]: https://misc.aotu.io/JChehe/xcel/instructions_for_use.png\n  [10]: https://misc.aotu.io/JChehe/xcel/app_update.png\n  [11]: https://github.com/SimulatedGREG/electron-vue\n  [12]: https://simulatedgreg.gitbooks.io/electron-vue/content/index.html\n  [13]: https://simulatedgreg.gitbooks.io/electron-vue/content/docs/npm_scripts.html\n  [14]: https://misc.aotu.io/JChehe/xcel/component_structure.png\n  [15]: https://misc.aotu.io/JChehe/xcel/data_structure.png\n  [16]: https://misc.aotu.io/JChehe/xcel/excel.png\n  [17]: https://misc.aotu.io/JChehe/2016-11-15-xcel/file-structure.jpg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo2team%2Fxcel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fo2team%2Fxcel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo2team%2Fxcel/lists"}