前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Script Lab 版,九九乘法表,Excel 基础操作(2)

Script Lab 版,九九乘法表,Excel 基础操作(2)

作者头像
寒树Office与RPA
发布2019-11-29 00:03:57
1.1K0
发布2019-11-29 00:03:57
举报
文章被收录于专栏:寒树Office与RPA

前期00:深度:从 Office 365 新图标来看微软背后的设计新理念

前期01:尝试:Script Lab,快速 Office 365 开发工具

前期02:尝试:Script Lab,知识储备

本期03:实践:Script Lab,启动函数,Excel 基础操作(1)

本期04:实践:Script Lab,九九乘法表,Excel 基础操作(2)

准备工作

女儿二年级了,开始学习乘法,天天回家背一篇九九乘法口决表。暂时还没人投稿,所以就想到用九九乘法表来做一个实例吧,也算有点小小的用处。

实现这个口算法分三个步骤:

  1. 创建一张新的工作表,命名为"9X9";
  2. 从 A1 的位置开始打印剩法表;
  3. 乘法表之外的那个部分标上绿色(纯为了演示用)。

Office加载项是使用Web技术构建的,与 Excel 进行交互,这要还是靠 Javascript 语言。选择 JavaScript 语言花了点时间,最后确认使用 TypeScript,更接近于 C# ,确实要好用多了。

九九乘法表

【创建工作表】

创建工作表,还是花了不少时间,毕境还是不太习惯。最后是在 OfficeHelpers 空间中找到了,这点是跟 VBA/VSTO 不一样的地方,但是一通百通,明白了就 OK 了,下回专门为这个空间作个介绍吧,代码如下:

OfficeHelpers.

ExcelUtilities.

forceCreateSheet(context.workbook, "9X9");

【打印乘法表】

上一课也讲了如何为单元格赋值,有了上课的基础,这里的代码就不是问题了。再加上一个循环就能 OK 了,而且循环的语法与 TypeScript 基本一致,关键代码如下:

sheet.getCell(i, j).values = [[fmlTxt]];

【标注颜色】

同样是一个循环,加上了一点格式处理的代码:

.format.fill.color = "green";

selectionRange.format.autofitColumns();

代码语言:javascript
复制
Excel.run(async function (context) {
    //创建工作表    const sheet = await        OfficeHelpers.            ExcelUtilities.            forceCreateSheet(context.workbook, "9X9");    sheet.activate();
    //打印剩法表    for (var i = 0; i < 9; i++) {        for (var j = 0; j < 9; j++) {            var fmlTxt =                (i + 1).toString() +                " * " +                (j + 1).toString() +                " = " +                ((i + 1) * (j + 1)).toString();            sheet.getCell(i, j).values = [[fmlTxt]];        }    }
    //标注颜色    var selectionRange = sheet.getRange("a1:i9");    selectionRange.format.fill.clear();
    for (var i = 0; i < 9; i++) {        for (var j = 0; j < 9; j++) {            if (i < j) {                selectionRange.getCell(i, j)                    .format.fill.color = "green";            }        }    }
    selectionRange.format.autofitColumns();
    await context.sync();}).catch(OfficeHelpers.Utilities.log);

【小技巧】

无法执行:在编辑状态时,无法执行代码,按个回车退出下。

context.sync

在 OfficeJS 的 API 示例代码中,总能看到这样一句代码:

代码语言:javascript
复制
await context.sync();

从官网上查询一番,得到的意思大概是这样的,之前的代码只是添加到内部的执行队列中,并未真正执行,直到并等待被“更新”,context.sync() 便是此意,暂且称之为同步函数。而且文档中还提到,应该尽量减少同步函数的调用次数。每个 sync 都会造成宿主应用程序(此处是 Excel)的额外开销,尤期是在 Office Online 时,成本更是大大增加了。

今天的代码,主要是解决一个编程习惯的问题,去找一些现成的 VBA 代码去改造成 Web Add-ins 插件,或是个不错的主意。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 寒树Office与RPA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档