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

2023年07月19日作者: Mona

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

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

关于性别化

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