借助 ONLYOFFICE 宏进行去重

在本文中,我们将介绍一个简短的宏。您可使用它来从电子表格中去掉重复项。就功能性而言,其与 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;
    // 具有重复数字的单元格值 Map
    var 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;
    // 单元格值 Map
    var mapValues = {};
    // 所有单元格范围
    selection.ForEach(function (range) {  
        // 从单元格中获取值
        var value = range.GetValue();   
         // 如果单元格没有重复值
        if (!mapValues.hasOwnProperty(value)) {   
         // 我们将该值设为 0
            mapValues[value] = 0;  
       }
  });
})();

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue和Spring Boot都是非常流行和强大的开发框架,集成OnlyOffice可以提供一个完整的在线文档协作和编辑平台。 OnlyOffice是一个强大的在线办公套件,它支持多人协同编辑文档、电子表格和演示文稿等。Vue是一个用于构建用户界面的JavaScript框架,而Spring Boot是一个用于构建Java应用程序的框架。集成OnlyOffice即意味着我们可以在Vue和Spring Boot应用程序中实现在线文档协作和编辑功能。 在集成OnlyOffice时,首先我们需要在Vue中引入OnlyOfficeJavaScript SDK或使用其提供的Vue组件。这些组件可以用来在Vue应用程序中显示OnlyOffice文档编辑器。我们还可以使用OnlyOffice的API来实现文档的上传、下载和保存等功能。 在后端,我们可以使用Spring Boot提供的RESTful API来处理与OnlyOffice编辑器的交互。通过这些API,我们可以接收来自编辑器的请求并提供文档的相关操作,比如保存、下载和协同编辑等。 为了实现真正的协同编辑功能,我们可以使用WebSocket技术来实现实时通信。Vue和Spring Boot都有相应的WebSocket支持,我们可以使用它们来建立客户端和服务器之间的双向通信,以便在多个用户之间实现文档的协同编辑。 总结来说,Vue和Spring Boot集成OnlyOffice可以为我们提供一个完整的在线文档协作和编辑平台。在前端,我们可以使用Vue和OnlyOfficeJavaScript SDK或Vue组件来实现在线文档编辑器的显示和操作。在后端,使用Spring Boot提供的API来处理与OnlyOffice编辑器的交互,并借助WebSocket技术实现实时通信和协同编辑功能。通过这样的集成,我们可以轻松构建一个强大的在线文档协作平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值