在本文中,我们将介绍一个简短的宏。您可使用它来从电子表格中去掉重复项。就功能性而言,其与 Excel 中已得到广泛使用的 “去重” 宏类似。不过,由于这是一个基于 JavaScript 的宏,所以其背后的原理将会由些许不同。

关于 ONLYOFFICE 

如果您是一名资深 Microsoft Excel 用户,那么相信您已对于 VBA 宏非常熟悉了。这些宏是帮助您自动执行日常任务的小型脚本。无论是重构数据,还是在单元格区域中插入多个值。ONLYOFFICE 宏的基础是 JavaScript 语法与文档生成器 API 方法。基于 JavaSript 的宏易于使用,具有跨平台特性且十分安全。这就使得其与 VBA 相比有着显著的优势。

ONLYOFFICE 文档免费在线宏课程

近期,我们将开始发布有关 ONLYOFFICE 解决方案的免费视频课程。首个视频课程将关注 ONLYOFFICE 文档中的宏,现已在 YouTube 上提供。

​本课程分为 4 节,每节时长大约在 5-10 分钟。您将了解宏的工作原理,以及一些实际的例子。为了方便起见,我们还在视频描述中添加了时间戳 – 只需点击一下即可转到您感兴趣的主题。

阅读 ​​这篇文章​​,了解更多。

参考宏

作为参考,这里我们会使用 “高亮重复项” 宏。ONLYOFFICE 宏会以不同的颜色对所选区域中的重复项进行高亮。示例代码可在我们 API 文档页面中的宏样本部分找到。下面就让我们来仔细了解一下吧。

我们在最开始为不重复值所在的单元格设置白色填充。对于重复值所在的单元格,我们将为之创建一个包含不重复颜色的数组。这一功能可通过 CreateColorFromRGB API 方法进行实现:

(function ()
{// 具有不重复值的单元格背景颜色var whiteFill = Api.CreateColorFromRGB(255, 255, 255);// 颜色范围的当前索引var uniqueColorIndex = 0;// 用于高亮重复值的颜色范围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)];

之后,我们来添加一个函数,并使用它来从数组中选择颜色:

  // 用于获取重复项颜色的函数function getColor() {// 如果您已选择过所有颜色,那么就从头再来if (uniqueColorIndex === uniqueColors.length) {uniqueColorIndex = 0;}return uniqueColors[uniqueColorIndex++];}

然后我们将选择活动工作表并执行 ForEach 方法。其将遍历所选范围并为包含重复值的单元格分配额外值:

// 获取活动工作表var activeSheet = Api.ActiveSheet;// 获取活动工作表选择范围var selection = activeSheet.Selection;// 具有重复数字的单元格值 Mapvar mapValues = {};// 所有单元格范围var arrRanges = [];// 遍历选择范围selection.ForEach(function (range) {// 从单元格中获取值var value = range.GetValue();if (!mapValues.hasOwnProperty(value)) {mapValues[value] = 0;}mapValues[value] += 1;arrRanges.push(range);});

现在我们再来遍历一遍所有单元格。如果单元格中有我们在前面分配的额外值,那么就执行 getColor 函数。其将为重复值单元格挑选一个填充颜色。然后我们使用 SetFillColor 方法来应用颜色。剩余非重复项的单元格将被填充白色背景色:

  var value;var mapColors = {};// 如果该值重复超过 1 次,我们就将检查范围中的所有单元格并设置高亮for (var i = 0; i < arrRanges.length; ++i) {value = arrRanges[i].GetValue();if (mapValues[value] > 1) {if (!mapColors.hasOwnProperty(value)) {mapColors[value] = getColor();}arrRanges[i].SetFillColor(mapColors[value]);} else {arrRanges[i].SetFillColor(whiteFill);}}});

新建宏

“去重” 宏不会对重复值进行高亮。其会将重复项从选择范围中移除。这种情况下,我们只需要对重复值进行检测的部分代码即可:

 (function ()
{// 获取活动工作表var activeSheet = Api.ActiveSheet;// 获取活动工作表选择范围var selection = activeSheet.Selection;// 单元格值 Mapvar mapValues = {};// 所有单元格范围selection.ForEach(function (range) {  // 从单元格中获取值var value = range.GetValue();   // 如果单元格没有重复值if (!mapValues.hasOwnProperty(value)) {   // 我们将该值设为 0mapValues[value] = 0;  }});
})();

现在我们需要一个清除重复单元中内容的方法。这里我建议使用 Clear 方法。其会将电子表格当前范围内的内容清空。这就使其成为了完美的候选方法。如果单元格具有重复值,我们就将此方法包含在代码运行的 else 语句中:

 (function ()
{// 获取活动工作表var activeSheet = Api.ActiveSheet;// 获取活动工作表选择范围var selection = activeSheet.Selection;// 单元格值 Mapvar mapValues = {};// 所有单元格范围selection.ForEach(function (range) { // 从单元格中获取值var value = range.GetValue();  // 如果单元格没有重复值if (!mapValues.hasOwnProperty(value)) {   // 我们将该值设为 0mapValues[value] = 0;  }// 如果单元格中有重复值else {  // 清除单元格内容range.Clear();       }});
})();

这里的宏只是借助我们的 API 方法可以实现的众多功能之一。我们强烈建议您上手试试,创建自己的宏。欢迎随时提问,也欢迎与我们分享您的想法和宏。我们已做好与您探讨和合作的准备。祝您的探索之旅一帆风顺!

借助 ONLYOFFICE 宏进行去重相关推荐

  1. 借助 ONLYOFFICE 宏在电子表格中插入 Google 搜索结果

    网络搜索已经成为我们生活之中必不可缺的一个部分,甚至已经成为了我们的日常生活.但是,如果我们想将搜索结果存储于别处,该怎么办呢?比如存储在电子表格中-这是一种非常便捷的数据操作方式.在本文中,我们将展 ...

  2. 借助 ONLYOFFICE 宏通过 OpenAI 数据填充单元格

    AI 技术现已取得重大进展,同时也成为了颇具价值的工具,可帮助我们自动化工作流.在​​之前的帖子​​中,我们提到过可使用 OpenAI 生成文章的 ONLYOFFICE 宏.那么在本文中,我们将为您演 ...

  3. 使用 ONLYOFFICE 宏借助 ChatGPT 生成文章

    AI 技术在过去几年中得到了显著提升,同时也成为了我们日常生活中必不可少的一部分.现在,我们会将这种高科技功能纳入到文档撰写过程.在本文中,我们将展示如何构建一个宏来使用 ChatGPT API 生成 ...

  4. 使用 ONLYOFFICE 宏将形状替换为图表

    演示文稿已经成为我们生活的重要组成部分.无论是商务会议还是学校的项目,我们都要使用演示文稿,向观众呈现我们的想法.可是,要给演示文稿中的 100 张幻灯片调整格式,可不是件轻松的事儿.在本篇博文中,我 ...

  5. excel中vlookup_在Excel中使用Power查询克服vlookup的局限性

    excel中vlookup This article is for all excel wizards, conversant with majority of excel features and ...

  6. win10桌面图标有小白标_白标移动应用程序,带有react native和babel

    win10桌面图标有小白标 In my previous article, I described a solution for white labelling web applications wh ...

  7. EST | 西湖大学鞠峰组提出表型宏基因组学用于超广谱抗生素耐药组的高通量环境检测...

    超广谱抗生素作为抗菌范围广泛的抗生素,是治疗严重致病细菌感染的关键临床药物.世界卫生组织(WHO)在最新版人类抗生素药物目录报告中提到了头孢菌素和碳青霉烯这两大类超广谱抗生素.然而,这两类超广谱抗生素 ...

  8. ONLYOFFICE如何与Moodle集成连接

    ONLYOFFICE如何与Moodle集成连接 Moodle网络教学系统 互联架构 ONLYOFFICE文档服务器安装 互联网在线版 本地私有云版 在Moodle中配置ONLYOFFICE连接器插件 ...

  9. ONLYOFFICE 桌面编辑器 v7.3 新功能介绍

    ONLYOFFICE 桌面编辑器版本 7.3 已经可以在 Windows.Linux 和 macOS 上使用.桌面版的大部分新功能与在线编辑器的相同,但桌面编辑器也带来了一些独特的功能,例如,新的打印 ...

最新文章

  1. 制作OpenStack上使用的CentOS系统镜像
  2. 【 MATLAB 】Filter Data
  3. Intent七大属性之总结
  4. 基于Matlab的循环码实验报告,基于MATLAB的循环码实验报告
  5. 前端学习(2227):react之状态二
  6. 三菱PLC支持哪种OPC服务器,OPC-访问三菱Q系列PLC方法
  7. input子系统驱动学习之中的一个
  8. 老年代的更新机制_魔兽世界:60年代五大“远古”机制,这根胡萝卜,可是当年的神器...
  9. 李沐亚马逊资深首席科学家 - 动手学深度学习v2 -2安装
  10. matlab中fft定点运算,可用于嵌入式计算的定点FFT算法 (转载)
  11. CAN通讯进阶-基于Python使用dbc文件解析CAN数据(dbc文件的创建、使用方法)
  12. “网易有钱”sketch使用分享
  13. 虚拟机服务器坏处,服务器虚拟化技术的优缺点
  14. Windows安全基础-AD域
  15. openwrt官方固件怎么中继网络
  16. c语言中char类型的存储形式是,在c语言中char型数据在内存中是怎样的存储形式?...
  17. (ECPC 16) (6/11)
  18. 王艺瑞浙江大学计算机学院,关于公示2010年(秋)同等学力申请进入论文阶段学员名单的通知...
  19. 全面理解Web3.0时代
  20. c mysql加密解密_mysql内置加密函数对数据加密

热门文章

  1. Java基础Map循环遍历
  2. 苹果8p电池多少毫安的_给苹果8p用12w的充电器充电会怎么样?会不会对电池不好?-苹果...
  3. python求函数一二阶导_如何用Matlab求二阶导数
  4. 用Hyper-V在win10中创建虚拟机,简单快捷
  5. 红米3 android 版本,​ 小米再出一代神机,三年前红米手机成功运行安卓10系统...
  6. 巧妙解决百度地图加偏纠偏问题
  7. 泰坦尼克号python数据分析统计服_python数据处理——泰坦尼克
  8. win10系统无法连接xp工作组计算机,xp系统无法访问win10系统的共享文件怎么办
  9. java如何设置1.5倍行距_Java如何在iText中设置段落行间距?
  10. 华三(H3C)在中国市场的份额已连续三年超过思科-进军海外市场