Skip to content

Instantly share code, notes, and snippets.

@chenxizhang
Last active September 20, 2022 12:28
Show Gist options
  • Save chenxizhang/c9ecfb8191578f8122c47ca22cbbeb17 to your computer and use it in GitHub Desktop.
Save chenxizhang/c9ecfb8191578f8122c47ca22cbbeb17 to your computer and use it in GitHub Desktop.
介绍了基本知识
name: 基本知识
description: 介绍了基本知识
host: EXCEL
api_set: {}
script:
content: >
// 那些Excel中的脚本 (公众号:code365)
// 作者:陈希章
// 为一个id为run 的按钮绑定click(点击)事件,如果被点击,则执行一个方法
trycatch,在trycatch这个方法里面,执行一个名叫run的方法
$("#run").click(() => tryCatch(run));
// 这就是那个叫run的方法,本例中可以理解为核心业务逻辑代码
// async
这个关键字,表示这是一个异步方法。异步编程在主流的编程语言中都是最基本的一个要素,尤其在Javascript这种语言中更为重要。异步表示执行这个方法,并不需要阻塞当前应用程序的主线程,它可以在另外一个工作线程运行,然后知道它做完了,才回来告诉主线程即可。这样可以提高程序的并发性,也避免了页面被卡住的风险。
async function run() {
// await 是与 async相关的关键字。await 后面跟的肯定是一个async方法,所以它的意思就是说,我在这里等待某个异步方法的结束。本例而言,Excel.run其实是一个异步方法,它的返回值是 Promise(承诺:就是我答应你会返回值,但其实我也不知道什么时候返回),而不是一个具体的值。
await Excel.run(async (context) => {
// run方法其实是一个方法包装器,它可以用来运行任何的代码。但因为是在Excel中运行,所以它会默认把当前环境的相关信息带进来以便你的代码可以访问到。这就是context这个对象。
// 在Excel中最重要的对象就是单元格(Range),下面这行代码是获取到用户当前选中的单元格(一个或一个区域)
const range = context.workbook.getSelectedRange();
// 为单元格的填充颜色设置为黄色
range.format.fill.color = "yellow";
// 这行代码很特殊,因为单元格的属性是很多很多的,除了极个别的之外,所有属性在被读取之前都需要明确地load进来。例如本例,希望能在后续显示单元格的地址,所以就需要load这个address属性。
range.load("address");
// 下面这行代码很特殊,也会经常看到。就是不管你对Excel什么对象的属性做了修改,要真正生效的话,都需要明确调用 context.sync 方法(意思是把更改同步过去)。你可以做很多操作,然后一次性sync。这样就能从某种程度上避免频繁地修改对象状态,提高执行效率。
await context.sync();
// 下面这样代码是演示了如何把一些附加信息通过打印到控制台,这是可以帮助进行调试的。
console.log(`The range address was "${range.address}".`);
});
}
/** 这个方法是设计用来执行任何方法,但是提供了异常处理的保护 */
async function tryCatch(callback) {
try {
//尝试执行
await callback();
} catch (error) {
//如果捕捉到异常
console.error(error);
}
}
language: typescript
template:
content: <button id="run">运行代码</button>
language: html
style:
content: |-
section.samples {
margin-top: 20px;
}
section.samples .ms-Button, section.setup .ms-Button {
display: block;
margin-bottom: 5px;
margin-left: 20px;
min-width: 80px;
}
language: css
libraries: |
https://appsforoffice.microsoft.com/lib/1/hosted/office.js
@types/office-js
office-ui-fabric-js@1.4.0/dist/css/fabric.min.css
office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css
core-js@2.4.1/client/core.min.js
@types/core-js
jquery@3.1.1
@types/jquery@3.3.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment