1 Star 0 Fork 2

jee / Excel_JS_Runtime

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
WTFPL

Excel_JS_Runtime

这是一个能在excel中舒服运行js的代码的框架

配置

  1. 能执行vba的office或者wps

  2. nodejs

  3. npm

  4. npm的http-server

关于这两个xlsm

  1. base.xlsm 是已经处理好的版本,能够直接使用

  2. forDev.xlsm 是我当前正在研发所使用的版本,看不懂里面的东西就别动了

使用示例

目标

下面以创建一个“把A列项与B列项相加的结果在C列项”的表格为例,命名为《A加B等于C.xlsm》

表格如下:

A B C
3 2 5
2 2 4
40 1 41

步骤

  1. base.xlsm 复制粘贴到你要放的位置,并把粘贴出来的base.xlsm副本命名为 A加B等于C.xlsm

  2. 在任意位置建立文件夹,并在文件夹内建立js文件 plusAToB.js

  3. 打开代码编辑器(sublime或者atom或者什么都可以),对 plusAToB.js 进行编辑,输入以下代码:

ExcelResult = Number(ExcelArgu[0]) + Number(ExcelArgu[1]);
  1. 打开CMD进入 plusAToB.js 所在的文件夹,执行命令 http-server 启动 http-server,CMD窗口便显示如下:
Starting up http-server, serving ./
Available on:
  http://172.27.35.27:8080
  http://192.168.174.1:8080
  http://192.168.159.1:8080
  http://192.168.137.1:8080
  http://127.
  0.
  0.1:8080
Hit CTRL-C to stop the server

可在浏览器访问 http://127. 0. 0.1:8080/plusAToB.js ,若出现步骤3中的代码,即表示成功运行http-server

  1. 打开 A加B等于C.xlsm ,excel软件提示是否启用宏的时候,选择

  2. 切换至 BASE_CODE_LIB 工作表,在单元格 A4 输入内容 plusAToB.js

  3. 摁下快捷键 Ctrl+Shift+R 后,单元格 B4 便出现步骤3中的代码,表示plusAToB.js的代码成功写入xlsm中

  4. 切换至 Sheet1 工作表,在单元格 A1 输入内容 3,在单元格 B1 输入内容 2

  5. 在单元格 C1 输入内容 =runJS("plusAToB.js",A1,B1) ,回车后,C1 便显示 A1+B1的值 则 5

  6. 在单元格 A2 输入内容 2,在单元格 B2 输入内容 2

  7. 在单元格 C2 输入内容 =runJS("plusAToB.js",A2,B2) ,回车后,C2 便显示 A2+B2的值 则 4

  8. 在单元格 A3 输入内容 40,在单元格 B3 输入内容 1

  9. 在单元格 C3 输入内容 =runJS("plusAToB.js",A3,B3) ,回车后,C3 便显示 A3+B3的值 则 41

关于 BASE_CODE_LIB 工作表

  1. BASE_CODE_LIB 工作表 是用于存放js代码的,任何js代码要执行,都必须被存储在这里。

  2. 快捷键 Ctrl+Shift+R 是调用vba函数(宏)UpdataJSFiles,该vba函数将会执行 UpdataJSFiles.js

关于 js 编程说明

  1. 由于vba调用的js引擎是windows系统COM组件的“Microsoft Script Control”,所支持的js特性较少,因此js的规范要参考IE6的js规范

  2. 在js中 ExcelResult 作为单元格的返回值,默认是0,可以被设置成其他

  3. 在js中 ExcelArgu 是 runJS函数所传递的参数,具体说明如下:

    在 runJS("plusAToB.js",A1,B1) 中
    ExcelArgu[0] 为 单元格A1的值
    ExcelArgu[1] 为 单元格B1的值
  1. 在js中,可以通过amd规范的define函数进行其他js的调用
// yewuxiezuo-zhixingshouceLib.js 文件
define(
    [],
    function ()
    {
        var obj = {
            getMarkIndex: function (dataIDs, _searchNum)
            {
                var len = dataIDs.length;
                for(var i = 0 ;i < len; i ++){
                    if(_searchNum == dataIDs[i]){
                        return i;
                    }
                }
            },
            getMarkName: function (numData, manData, _searchNum)
            {
                return manData[this.getMarkIndex(numData, _searchNum)];
            }
        };
        return obj;
    }
)
// 文件yewuxiezuo-idToManl.js
define(
    ["yewuxiezuo-zhixingshouceLib.js"],
    function (zhixingshouceLib)
    {
        var numData = ExcelArgu[0];
        var manData = ExcelArgu[1];
        ExcelResult = zhixingshouceLib.getMarkName(numData, manData, ExcelArgu[2]);
    }
)

注意事项

  1. BASE_CODE_LIB 工作表的A列中,从A1到A列中最后一个出现内容的单元格,中间不能出现出现任何没有内容的单元格

  2. 由于js错误处理尚未有解决方案,因此展示无法提示js哪里出现错误,请认真写代码仔细审查

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2018 陈轩大魔王 Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO.

简介

excel只能用vba写代码?不,你可以试试用js 展开 收起
JavaScript
WTFPL
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
JavaScript
1
https://gitee.com/jempson/Excel_JS_Runtime.git
git@gitee.com:jempson/Excel_JS_Runtime.git
jempson
Excel_JS_Runtime
Excel_JS_Runtime
master

搜索帮助