ONLYOFFICEマクロでパーソナライズされた男女別の挨拶を作成する方法

2023年07月18日著者:Denis

正しく挨拶することは、敬意、包括性、プロフェッショナリズムを示すため、コミュニケーションにおいて非常に重要です。この記事では、ONLYOFFICE DocsでGenderize.io APIを利用して英語などの外国語で適切なパーソナライズされた挨拶を生成するマクロを構築する方法を紹介します。

Generate personalized gender-based greetings with ONLYOFFICE macro

 

Genderizeについて

Genderize.ioは、名前に関連する性別を予測するAPIサービスです。これは、アプリケーションやスクリプトに性別識別機能を統合する簡単な方法を開発者に提供します。Genderize API に名前をパラメータとして送信すると、ユーザーは予測された性別と予測の信頼度などの追加情報を含む応答を受け取ります。Genderize.io は、与えられた名前に関連する性別を決定するプロセスを簡素化します。

マクロの構築

アクティブなシートへの参照を保持する変数 oWorksheet を初期化することから始めます。アクティブシートにアクセスすることで、スプレッドシート内のデータを操作できるようになります:

const oWorksheet = Api.GetActiveSheet()

次に、A列のデータの開始行を表すROW変数を2に初期化します:

 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 関数の目的は、Genderize API に AJAX リクエストを送信することです:

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におけるマクロの可能性を探求し続けることをお勧めします。スクリプトをより深く理解することで、繰り返し作業を自動化し、生産性を向上させ、特定のニーズに合わせて文書をカスタマイズするための独自のマクロを作成することができます。ご質問や共有したいアイディアがありましたら、お気軽にコメントを残すか、私たちにご連絡ください。