Excel ScriptLab学习笔记
注意
The Excel JavaScript API 没有“Cell”对象或类。 相反,Excel JavaScript API 将所有 Excel 单元格定义为 Range 对象。 Excel UI 中的单个单元格转换为 Excel JavaScript API 中包含一个单元格的 Range 对象。 单个 Range 对象也可以包含多个连续的单元格。 若要了解详细信息,请参阅使用 Excel JavaScript API 处理单元格。
官方文档
这里是针对Excel JavaScript API
的帮助文档的开头,其下一级子目录如下图,包含了常用功能的说明
建议直接点击该连接,查看官方文档,内容都是中文,且有示例,通俗易懂。
https://learn.microsoft.com/zh-cn/office/dev/add-ins/reference/overview/excel-add-ins-reference-overview
本笔记下面的内容只会对官方文档做连接和摘抄,没有额外内容
使用 Excel JavaScript API 设置和获取范围值、文本或公式
https://learn.microsoft.com/zh-cn/office/dev/add-ins/excel/excel-add-ins-ranges-set-get-values
简单总结下
获得某个、某些连续的单元格的range对象
let range = sheet.getRange("MyRange");
读取值
需要先调用load(prop)
方法,用于加载对应的内容,所传的prop
参数有三种:
// values如果单元格里面是公式,则可能拿不到值;text:取得与表格中展示出来的内容,没公式的是原值,有公式的就是公式得到的值; formulas:没公式的就是原值,有公式的就是公式
// 先调用方法,显式加载相应的值
range.load("values");
// 与excel通信,获取实际的值,该语句必须执行,否则对应的属性上可能会没有值
await context.sync();
// 此时即可以使用相应的数据了
console.log(JSON.stringify(range.values, null, 4));
// 设置值,由于是个区域对象,会包含多行多列的数据,因此需要提供一个二维数组。一层数组中的每个对象表示一行数据,二层数组中的每个数据为该行、该列,即具体单元格的值。
// 设置单值
let range = sheet.getRange("C3");
range.values = [[ 5 ]];
range.format.autofitColumns();
// 生效到excel中
await context.sync();
// 添加公式
let data = [
["=C3 * D3"],
["=C4 * D4"],
["=C5 * D5"],
["=SUM(E3:E5)"]
];
let range = sheet.getRange("E3:E6");
range.formulas = data;
await context.sync();
调用内置 Excel 工作表函数
https://learn.microsoft.com/zh-cn/office/dev/add-ins/excel/excel-add-ins-worksheet-functions
模板
代码模板
下面是打开ScriptLab
就可以看到的代码内容
// Script
$("#run").on("click", () => tryCatch(run));
async function run() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
// 可以在这里写用来操作excel数据的代码
// 如果代码中有需要向excel中写入的数据,则这句必需要执行
await context.sync();
});
}
/** Default helper for invoking an action and handling errors. */
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
// Note: In a production add-in, you'd want to notify the user through your add-in's UI.
console.error(error);
}
}
<!-- HTML -->
<button id="run" class="ms-Button">
<span class="ms-Button-label">Run</span>
</button>
// css
section.samples {
margin-top: 20px;
}
section.samples .ms-Button, section.setup .ms-Button {
display: block;
margin-bottom: 5px;
margin-left: 20px;
min-width: 80px;
}
// Libraries
https://appsforoffice.microsoft.com/lib/1/hosted/office.js
@types/office-js
office-ui-fabric-core@11.1.0/dist/css/fabric.min.css
office-ui-fabric-js@1.5.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