首页 > 其他分享 >使用 ONLYOFFICE 宏查找公司标识

使用 ONLYOFFICE 宏查找公司标识

时间:2023-09-06 21:34:31浏览次数:44  
标签:currentRow data value 查找 标识 API var oWorksheet ONLYOFFICE

现在各种标识形形色色,要找到标识相关的参考可能有些麻烦,甚至可能让人迷惑。不过,您可以使用 ONLYOFFICE 宏,让这个过程自动执行。在这篇博文中,我们会向您展示如何创建一个宏,让它同时从外部 API 检索多种标识类型,并将它们插入到您的电子表格中。

使用 ONLYOFFICE 宏查找公司标识_代码

什么是 ONLYOFFICE 宏

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

访问 API

在这个教程中,我们会使用 API Ninjas 提供的 Logo API。API Ninjas 是一个在线平台,提供一系列 API 相关的资源和洞见。这个平台还提供诸多免费的 API,开发者可以将它们用在自己的项目中。具体而言,您可以使用 Logo API 访问一众公司的标识图片。

构建宏

首先,我们定位到活动的工作表:

// Get the active worksheet
    var oWorksheet = Api.GetActiveSheet();

然后,我们在文档上做出选择,相应被选择的单元格的值会被用在 API 请求中:

var selectedRange = Api.GetSelection()

之后,我们添加逻辑,为要插入到文档中的数据设置标题。我们首先创建一个包含字段名称(“name”、“ticker”、“image”)和列的字母组成的数组:

// Define a mapping of values to insert into specific columns
    var valuesToInsert = {
        "name": "B",
        "ticker": "C",
        "image": "D"
    };

在映射列和值时,我们会循环遍历“valuesToInsert”对象中每个字段的名称。对于每个字段,我们提取相应的单元格,检查单元格是否为空。如果单元格为空,则使用“oCell.SetValue()”方法将与该字段关联的、预定义的值插入到单元格中:

// Loop through the values to insert and populate empty cells
    for (var value in valuesToInsert) {
        var oCell = oWorksheet.GetRange(valuesToInsert[value] + "1");
        if (!oCell.GetValue()) oCell.SetValue(value);
    }

然后,我们使用“selectedRange.ForEach()”函数迭代选定范围中的每个单元格。这个函数会提取每个单元格中的值。如果这个值是存在的,就会向 API 发出 AJAX 请求,之后响应数据会在“success”回调中处理:

// Iterate through each cell in the selected range
    selectedRange.ForEach(function (cell) {
        var value = cell.GetValue();
        if (value) {
            // Make an AJAX request to an API to retrieve data based on the cell value
            $.ajax({
                method: 'GET',
                url: 'https://api.api-ninjas.com/v1/logo?name=' + value,
                headers: { 'X-Api-Key': 'yourAPIkey' },
                contentType: 'application/json',
                success: function(result) {
}

在 AJAX“success”回调中,我们检索 API 的响应。代码之后会迭代响应数据,并将检索到的数据填充到工作表中特定的列中。“currentRow”变量决定要填充的行,相应的列会由数据填充。还有“AutoFit”函数,可根据填充的数据调整列宽:

// Iterate through the API response and populate data into specific columns
                    for (var i = 0; i < result.length; i++) {
                        var data = result[i];
                        var currentRow = cell.GetRow() + i - 1;
// Populate data into specific columns and adjust column width
                        oWorksheet.GetRangeByNumber(currentRow, 1).SetValue(data.name);
                        oWorksheet.GetRangeByNumber(currentRow, 1).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 2).SetValue(data.ticker);
                        oWorksheet.GetRangeByNumber(currentRow, 2).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 3).SetValue(data.image);
                        oWorksheet.GetRangeByNumber(currentRow, 3).AutoFit(false, true);
                    }

这个宏的完整代码如下:

(function() {
    // Get the active worksheet
    var oWorksheet = Api.GetActiveSheet();
    // Get the currently selected range of cells
    var selectedRange = Api.GetSelection();
    // Define a mapping of values to insert into specific columns
    var valuesToInsert = {
        "name": "B",
        "ticker": "C",
        "image": "D"
    };
    // Loop through the values to insert and populate empty cells
    for (var value in valuesToInsert) {
        var oCell = oWorksheet.GetRange(valuesToInsert[value] + "1");
        if (!oCell.GetValue()) oCell.SetValue(value);
    } 
    // Iterate through each cell in the selected range
    selectedRange.ForEach(function (cell) {
        var value = cell.GetValue();
        if (value) {
            // Make an AJAX request to an API to retrieve data based on the cell value
            $.ajax({
                method: 'GET',
                url: 'https://api.api-ninjas.com/v1/logo?name=' + value,
                headers: { 'X-Api-Key': 'yourAPIkey' },
                contentType: 'application/json',
                success: function(result) {
                    console.log(result);
                    // Iterate through the API response and populate data into specific columns
                    for (var i = 0; i < result.length; i++) {
                        var data = result[i];
                        var currentRow = cell.GetRow() + i - 1;
                        // Populate data into specific columns and adjust column width
                        oWorksheet.GetRangeByNumber(currentRow, 1).SetValue(data.name);
                        oWorksheet.GetRangeByNumber(currentRow, 1).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 2).SetValue(data.ticker);
                        oWorksheet.GetRangeByNumber(currentRow, 2).AutoFit(false, true);
                        oWorksheet.GetRangeByNumber(currentRow, 3).SetValue(data.image);
                        oWorksheet.GetRangeByNumber(currentRow, 3).AutoFit(false, true);
                    }
                },
                error: function ajaxError(jqXHR) {
                    console.error('Error: ', jqXHR.responseText);
                }
            });
        }
    });
})();

现在让我们运行宏, 看看视频了解它如何工作的!

我们希望这个宏能快速成为您武器库中宝贵资产。ONLYOFFICE API 功能多样,能力卓越,为任务的自定义和自动化创造诸多可能。

在您深入研究怎么编写宏时,不要忘了 ONLYOFFICE API 为您提供的无限可能。如果您有问题或新创意,欢迎发表评论,或联系我们分享出来。我们非常重视您的洞见,期待合作。祝您在探索旅途中好运!

相关链接

将 Microsoft Office 宏转换为 ONLYOFFICE 宏

使用 ONLYOFFICE 宏检索网站详细信息

ONLYOFFICE API 文档

宏的样例

ONLYOFFICE 文档中的宏【免费课程】

标签:currentRow,data,value,查找,标识,API,var,oWorksheet,ONLYOFFICE
From: https://blog.51cto.com/u_15679924/7390544

相关文章

  • JavaScript--查找当前节点的父节点
    consttreeData=(item)=>{if(item.parent&&item.parent.length>0){let_parent=data.taskData.filter((data)=>data.id==item.parent);if(_parent&&_parent.length>0){if(da......
  • JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
    一、遇到问题在 继续更新完善:C++结构体代码转MASM32代码 中,由于结构体成员中可能为数组类型的情况,因此我们在提取结构体成员信息的过程中,需要检测结构体成员名称字符串中是否包括[],如果包括那么我们要截取'['前面的内容作为成员名称。在用字符串的indexOf()方法检测和定位'['......
  • 使用百度文心一言生成bat代码(查找当前目录所有文件名带11的txt文件并修改为22)
    百度文心一言开放给普通用户了,网址:文心一言请用[bat]编程:查找当前目录所有文件名带11的txt文件并修改为22生成的代码需要简单修改下,主要问题在->位置没有使用转义符会导致echo后面的字符到txt中,思路还是可以的,不错点击查看代码@echooffsetlocalenabledelayedexpansion......
  • Java 二分查找
    思路问题描述:在采用顺序存储结构的有序数组中,查找目标元素,如果目标元素存在,返回对应的数组下标。假设查找的有序数组为升序,二分查找采用以下的思路进行解决:将数组中间位置的元素与目标元素比较,如果二者相等,则查找成功;否则,从中间位置将数组分为前、后两个数组;如果中间位置......
  • VS2022 全局查找失效
    问题:ctrl+f全局搜索失效,只能查出来xml文件的内容解决方案:1、重启vs2、删除项目下的.vs文件夹3、删除“C:\ProgramFiles\MicrosoftVisualStudio\2022[Enterprise/Pro/Community]\Common7\IDE\CommonExtensions\Microsoft\Editor\ServiceHub\Indexing.servicehub.service.jso......
  • Python中查找质因数
    如何在Python中进行素因式分解。质因数分解的概述在数学中,一个数的因数是指那些可以除以给定数并留下零余数的数字。质数是只有两个因数的独特数字,一个和数字本身。这类数字的一些例子是3,7,11,13,等等。素数因数化是指找到所有乘以原数的素数。我们可以考虑一个简单的例子:数......
  • 优化函数迭代每次都要查找的代码
    在做Perfeye需求的时候,有写了一个函数,每次遍历,要根据相同的时间,把对应的数据整合刚开始用findIndex进行每次查找,但是性能很差,后面问了gpt有没有什么操作能不用findIndex,gpt说可以单独存储时间索引值来进行判断旧代码constgetFTimeDataSetSourceData=()=>{constresu......
  • adb devices 无法查找到设备
    检查环境1.是否开启了开发者模式:进入设置,点击关于手机 点击系统的版本号5次 弹出进入开发者模式2.是否在开发者模式中开启了USB调试进入开发者模式,开启USB调试 验证adb devices回车 ......
  • Linux文件管理知识查找文件(第二篇)
    Linux文件管理知识:查找文件(第二篇)上篇文章详细介绍了linux系统中查找文件的工具或者命令程序locate和find命令的基本操作。那么,今天这篇文章紧接着查找文件相关操作内容介绍。Find命令所属操作列表中的条目,有助于我们想要的结果输出。上篇文章已讲到find命令是基于搜索结果来执......
  • Linux文件管理知识:查找文件(第二篇)
    上篇文章详细介绍了 linux 系统中查找文件的工具或者命令程序locate和find命令的基本操作。那么,今天这篇文章紧接着查找文件相关操作内容介绍。 Find 命令所属操作列表中的条目,有助于我们想要的结果输出。上篇文章已讲到find命令是基于搜索结果来执行操作命令程序。预定......