很多时候,表格看起来可能会很乏味,让人很没有成就感。这个时候就需要一些宏的帮助了。这些小型脚本有助于实现日常任务的自动化,从而帮助我们提高生产力。
在本文中,我们将对一种用于高亮所有大于或小于某个值的小型宏进行讲解。
关于 ONLYOFFICE 宏
如果您是一名资深 Microsoft Excel 用户,那么相信您已对于 VBA 宏非常熟悉了。这些宏是帮助您自动执行日常任务的小型脚本。无论是重构数据,还是在单元格区域中插入多个值。ONLYOFFICE 宏的基础是 JavaScript 语法与文档生成器 API 方法。基于 JavaSript 的宏易于使用,具有跨平台特性且十分安全。这就使得其与 VBA 相比有着显著的优势。
ONLYOFFICE 文档免费在线宏课程
近期,我们将开始发布有关 ONLYOFFICE 解决方案的免费视频课程。首个视频课程将关注 ONLYOFFICE 文档中的宏,现已在 YouTube 上提供。
本课程分为 4 节,每节时长大约在 5-10 分钟。您将了解宏的工作原理,以及一些实际的例子。为了方便起见,我们还在视频描述中添加了时间戳 – 只需点击一下即可转到您感兴趣的主题。
阅读这篇文章,了解更多。
参考宏
作为参考,这里我们使用了一个 VBA 宏。其会调用一个输入框用于输入需要大于的值,然后在表格中搜索选中区域并突出显示目标单元格。
宏代码如下:
Sub HighlightGreaterThanValues()
Dim i As Integer
i = InputBox("Enter Greater Than Value", "Enter Value")
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlGreater, Formula1:=i
Selection.FormatConditions(Selection.FormatConditions.Count).S
tFirstPriority
With Selection.FormatConditions(1)
.Font.Color = RGB(0, 0, 0)
.Interior.Color = RGB(31, 218, 154)
End With
End Sub
但是,ONLYOFFICE 宏是基于JavaScript 的,这意味着其会更加通用,但也说明我们需要使用不同的方法来处理此任务。
使用单色对值进行高亮
这会是比较简单的选项。但在另一方面,这个宏还可以高亮显示所有小于某个值的各自。也就是说在此情形中,您可对使用一种颜色对所有大于某个值的格子进行高亮,还可用另一种颜色高亮所有小于某个值的格子。
好了,下面就让我们上手试试吧!首先,我们需要获取活动工作表。这里可以使用 Api.ActiveSheet 方法。其会返回一个代表活动工作表的对象。然后我们将目标放到在表格中的选中区域上:
(function ()
{
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
})();
现在我们需要从选中区域中获取每个单元格的值。这里可以使用 ForEach 方法。其会在每个单元格上执行一次所需的函数:
(function ()
{
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
selection.ForEach(function (range) {
var value = range.GetValue();
});
})();
接下来我们加入 IF 语句,用于检查选中区域中的值是否大于某个数字。这里就假设需要大于 5。如果值大于 5,我们就使用 SetFillColor 方法来该表单元格的填充颜色。该方法会根据 RGB 代码来创建填充颜色:
(function ()
{
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
selection.ForEach(function (range) {
var value = range.GetValue();
if (value > 5) {
range.SetFillColor(Api.CreateColorFromRGB(255,0,255));
}
});
现在我们来运行一下这个宏。
或者,您也可以改变目标值的字体颜色。为了实现这一目标,我们将需要将 SetFillColor 方法替换为 SetFontColor:
如需对小于某个值的各自进行高亮,则需要修改 IF 语句中的参数。现在,如果选中区域中某个单元格的值小于 5,那么单元格的背景颜色将发生变化。
(function ()
{
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
selection.ForEach(function (range) {
var value = range.GetValue();
if (value < 5) {
range.SetFillColor(Api.CreateColorFromRGB(255, 255, 0));
}
});
})();
使用多种颜色进行高亮
现在我们来提高一下难度:创建一个宏来使用多种颜色高亮目标单元格。
首先我们需要一些独特的颜色。我们可以使用 CreateColorFromRGB 方法来生成颜色,然后将其存储于 uniqueColors 数组中 :
var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
Api.CreateColorFromRGB(204, 204, 255),
Api.CreateColorFromRGB(0, 255, 0),
Api.CreateColorFromRGB(0, 128, 128),
Api.CreateColorFromRGB(192, 192, 192),
Api.CreateColorFromRGB(255, 204, 0),
Api.CreateColorFromRGB(255, 0, 0),
Api.CreateColorFromRGB(0, 255, 255),
Api.CreateColorFromRGB(255, 0, 255),
Api.CreateColorFromRGB(218, 128, 128),
Api.CreateColorFromRGB(128, 0, 0),
Api.CreateColorFromRGB(128, 0, 128),
Api.CreateColorFromRGB(0, 0, 128),
Api.CreateColorFromRGB(165, 42, 42),
Api.CreateColorFromRGB(220, 20, 60),
Api.CreateColorFromRGB(255, 99, 71),
Api.CreateColorFromRGB(205, 92, 92),
Api.CreateColorFromRGB(240, 128, 128),
Api.CreateColorFromRGB(255, 165, 0),
Api.CreateColorFromRGB(255, 215, 0),
Api.CreateColorFromRGB(184, 134, 11),
Api.CreateColorFromRGB(218, 165, 32),
Api.CreateColorFromRGB(173, 255, 47),
Api.CreateColorFromRGB(0, 100, 0),
Api.CreateColorFromRGB(50, 205, 50),
Api.CreateColorFromRGB(70, 130, 80),
Api.CreateColorFromRGB(75, 0, 130),
Api.CreateColorFromRGB(72, 61, 139),
Api.CreateColorFromRGB(255, 182, 193),
Api.CreateColorFromRGB(188, 143, 143),
Api.CreateColorFromRGB(112, 128, 144),
Api.CreateColorFromRGB(210, 180, 140),
Api.CreateColorFromRGB(105, 105, 105),
Api.CreateColorFromRGB(216, 191, 216),
Api.CreateColorFromRGB(240, 248, 255),
Api.CreateColorFromRGB(102, 205, 170),
Api.CreateColorFromRGB(255, 240, 245)];
接着我们声明 uniqueColorIndex 并将其设为 0。我们将使用该变量为索引,用于从数组中选择唯一的颜色。为此需要添加一个 IF 语句,便于我们对数组进行检索,然后步增索引:
var uniqueColorIndex = 0;
function getColor() {
if (uniqueColorIndex === uniqueColors.length) {
uniqueColorIndex = 0;
}
return uniqueColors[uniqueColorIndex++];
这时我们就需要用一个 IF 语句来找出目标值,并将颜色应用在单元格中。这里涉及的概念与之前的宏类似。我们以活动工作表为目标。然后获取选定区域中的单元格值。接着添加 IF 语句,寻找大于或小于某个值的单元格,并通过 SetFillColor 方法对其进行高亮显示。但这一次,颜色将会使用 getColor 函数进行生成:
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
selection.ForEach(function (range) {
var value = range.GetValue();
if (value > 5) {
range.SetFillColor(getColor());
}
});
完整的宏代码如下:
(function ()
{
var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
Api.CreateColorFromRGB(204, 204, 255),
Api.CreateColorFromRGB(0, 255, 0),
Api.CreateColorFromRGB(0, 128, 128),
Api.CreateColorFromRGB(192, 192, 192),
Api.CreateColorFromRGB(255, 204, 0),
Api.CreateColorFromRGB(255, 0, 0),
Api.CreateColorFromRGB(0, 255, 255),
Api.CreateColorFromRGB(255, 0, 255),
Api.CreateColorFromRGB(218, 128, 128),
Api.CreateColorFromRGB(128, 0, 0),
Api.CreateColorFromRGB(128, 0, 128),
Api.CreateColorFromRGB(0, 0, 128),
Api.CreateColorFromRGB(165, 42, 42),
Api.CreateColorFromRGB(220, 20, 60),
Api.CreateColorFromRGB(255, 99, 71),
Api.CreateColorFromRGB(205, 92, 92),
Api.CreateColorFromRGB(240, 128, 128),
Api.CreateColorFromRGB(255, 165, 0),
Api.CreateColorFromRGB(255, 215, 0),
Api.CreateColorFromRGB(184, 134, 11),
Api.CreateColorFromRGB(218, 165, 32),
Api.CreateColorFromRGB(173, 255, 47),
Api.CreateColorFromRGB(0, 100, 0),
Api.CreateColorFromRGB(50, 205, 50),
Api.CreateColorFromRGB(70, 130, 80),
Api.CreateColorFromRGB(75, 0, 130),
Api.CreateColorFromRGB(72, 61, 139),
Api.CreateColorFromRGB(255, 182, 193),
Api.CreateColorFromRGB(188, 143, 143),
Api.CreateColorFromRGB(112, 128, 144),
Api.CreateColorFromRGB(210, 180, 140),
Api.CreateColorFromRGB(105, 105, 105),
Api.CreateColorFromRGB(216, 191, 216),
Api.CreateColorFromRGB(240, 248, 255),
Api.CreateColorFromRGB(102, 205, 170),
Api.CreateColorFromRGB(255, 240, 245)];
var uniqueColorIndex = 0;
function getColor() {
if (uniqueColorIndex === uniqueColors.length) {
uniqueColorIndex = 0;
}
return uniqueColors[uniqueColorIndex++];
}
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
selection.ForEach(function (range) {
var value = range.GetValue();
if (value > 5) {
range.SetFillColor(getColor());
}
});
})();
现在就到了运行宏的时候了!
再次提醒,这里还可以使用 SetFontColor 方法:
本文中所介绍的小型宏只是众多 API 方法的可能实现中的一种。ONLYOFFICE 宏的功能极其丰富,也欢迎您来上手尝试并打造自己的脚本。欢迎随时与我们分享您的想法和宏。我们将随时做好与您探讨和合作的准备。祝您的探索之旅一帆风顺!