当前位置: 首页 > news >正文

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

相关文章:

  • Linux驱动编程 - Framebuffer子系统
  • 2025-03-16 学习记录--C/C++-PTA 练习4-7 求e的近似值
  • RabbitMQ(补档)
  • 设计模式-组件协作
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(57)乾坤尺量会议室 - 会议室安排(贪心排序)
  • 麒麟服务器操作系统Node.js环境部署手册
  • 3.16-线程同步
  • Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式
  • ollama注册自定义模型(safetensors)
  • 基于大模型的分泌性中耳炎全流程预测与治疗管理研究报告
  • 【C++】一文吃透STL容器——list
  • Linux内核实时机制30 - 实时优化方案 - 实时与非实时争抢
  • 谷歌开源多模态大模型 Gemma 3:轻量级与高性能的完美融合
  • 【经验】Orin系列Ubuntu远程桌面:VNC、NoMachine、URDC
  • Java EE(11)——文件I(input)/O(output)
  • 有效的山脉数组 力扣941
  • 使用GoldenGate完成SQLserver到Oracle的数据实时同步
  • C语言之 条件编译和预处理指令
  • 数据结构-树(详解)
  • 麒麟服务器操作系统Sqlite部署手册
  • 吴清:推动公募基金高质量发展的行动方案今天将会发布
  • 金融监管总局:正在修订并购贷款管理办法,将进一步释放并购贷款的潜力
  • 证监会主席吴清:我们资本市场最重要的特征是“靠谱”
  • 巴基斯坦所有主要城市宣布进入紧急状态,学校和教育机构停课
  • 胡祥|人工智能时代:文艺评论何为?
  • 市场监管总局通报民用“三表”专项检查结果