正确称呼他人对于沟通至关重要,因为它体现了尊重、包容性和专业精神。在本文中,我们将向您展示如何在 ONLYOFFICE 文档中构建一个宏,利用 Genderize.io API 生成适当的个性化问候语。

使用 ONLYOFFICE 宏生成基于性别的个性化问候语_onlyoffice

什么是 ONLYOFFICE 宏

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

ONLYOFFICE 文档免费在线宏课程

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

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

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

关于性别化

Genderize.io 是一项 API 服务,可预测与名字相关的性别。它为开发人员提供了一种将性别识别功能集成到其应用程序或脚本中的简单方法。通过将名称作为参数发送到 Genderize API,用户会收到包含预测性别和其他信息(例如预测置信度)的响应。Genderize.io 简化了识别名字性别的相关过程。

构建宏

我们首先要初始化 oWorksheet 变量,用于保存对活动工作表的引用。访问活动工作表可使我们能够操作电子表格中的数据:

const oWorksheet = Api.GetActiveSheet()

接下来,将 ROW 变量初始化为 2,表示 A 列中数据的起始行。该变量跟踪当前正在处理的行:

let ROW = 2

为了处理每一行,我们有 checkRow 函数。其主要目标是迭代每一行并处理处理逻辑。在 checkRow 函数中,我们使用 oWorksheet.GetRange(A${ROW}).GetText() 语句检索当前行的名称值。这将检索当前行 A 列中单元格的文本值:

function checkRow() {
        const name = oWorksheet.GetRange(`A${ROW}`).GetText()
}

如果检索到的名称为空,则表示数据结束。在这种情况下,我们调用 reload 函数,它可以重新加载工作表。另一方面,如果检索到的名称不为空,我们将继续调用 makeRequest 函数,并将名称作为参数传递:

function checkRow() {
        const name = oWorksheet.GetRange(`A${ROW}`).GetText()
        if (name === '') {
            return reload()
        }
        makeRequest(name)
    }

makeRequest 函数的目的是将 AJAX 请求发送到 Genderize API:

function makeRequest(name) {
        $.ajax({
            url: `https://api.genderize.io?name=${name}`,
            dataType: 'json',
        }).done(successFunction)
    }

从 Genderize API 收到响应后,就会调用  successFunction。在 successFunction 中,我们首先检查性别确定的概率是否大于 0.9。如果是,我们会根据 API 响应中的性别值分配适当的标题:

function successFunction(data) {
        if (data.probability > 0.9) {
            let title = data.gender === 'male' ? 'Mr' : 'Ms' 
        }
    }

为了生成个性化问候语,我们使用 oWorksheet.GetRange(B${ROW}).SetValue(…) 方法。这允许我们设置当前行的 B 列中的值。成功处理当前行后,我们增加 ROW 变量,然后再次调用 checkRow 函数。这种递归方法确保我们继续迭代每个后续行,直到到达数据末尾:

function successFunction(data) {
        if (data.probability > 0.9) {
            let title = data.gender === 'male' ? 'Mr' : 'Ms' 
            oWorksheet.GetRange(`B${ROW}`).SetValue(`Dear ${title} ${data.name}!`)
        }
        ROW++
        checkRow()
    }

一旦检测到数据末尾,我们就调用重新加载函数。此函数的目的是重新加载工作表,触发所有公式的重新计算。为此,我们使用 setInterval 定期执行 Api.asc_calculate(Asc.c_oAscCalculateType.All) 函数,该函数会重新计算工作表中的所有公式:

function reload() {
        let reload = setInterval(function(){
            Api.asc_calculate(Asc.c_oAscCalculateType.All);
        })    
    }
})()

整个宏代码如下:

(function()
{
    const oWorksheet = Api.GetActiveSheet()
    let ROW = 2
    checkRow()
    
    // Recursively request each name until 'A' column value is empty
    //
    // checkName -> makeRequest -> successFunction (ROW + 1) ->
    // checkName -> ... -> checkName -> name is empty -> reload
    function checkRow() {
        const name = oWorksheet.GetRange(`A${ROW}`).GetText()
        if (name === '') {
            return reload()
        }
        makeRequest(name)
    }
    
    // Request
    function makeRequest(name) {
        $.ajax({
            url: `https://api.genderize.io?name=${name}`,
            dataType: 'json',
        }).done(successFunction)
    }
    // Response
    function successFunction(data) {
        if (data.probability > 0.9) {
            let title = data.gender === 'male' ? 'Mr' : 'Ms' 
            oWorksheet.GetRange(`B${ROW}`).SetValue(`Dear ${title} ${data.name}!`)
        }
        ROW++
        checkRow()
    }
    
    // Sheet has to be reloaded on changes
    function reload() {
        let reload = setInterval(function(){
            Api.asc_calculate(Asc.c_oAscCalculateType.All);
        })    
    }
})()

点击这里,看看我们的宏运行后如何工作的!

我们希望这个宏将有助于简化邮件日常工作,让您能够专注于通信工作流程的其他重要方面。通过利用宏,我们可以释放 ONLYOFFICE 的全部潜力并提高工作效率。

希望大家能继续探索 ONLYOFFICE 宏的更多可能性。通过对脚本编写更深入的了解,可以创建自己的宏来自动执行重复性任务、提高工作效率并自定义文档以满足特定需求。如果有任何问题或想法要分享,请随时发表评论。我们愿意倾听您的想法,并渴望与您合作。祝探索之路好运!

相关链接

ONLYOFFICE API 文档

宏-示例

如何将微软 Office 宏转换为 ONLYOFFICE 宏

用 ONLYOFFICE 宏获取和插入详细的地址信息