在 Outlook 中撰写约会或邮件时将数据插入到正文中

使用 (Body.getAsyncBody.getTypeAsyncBody.prependAsyncBody.setAsyncBody.setSelectedDataAsync) 异步方法来获取正文类型并在撰写的约会或邮件的正文中插入数据。 这些异步方法仅适用于撰写加载项。若要使用这些方法,请确保已正确设置外接程序清单,以便 Outlook 在撰写窗体中激活加载项,如 为撰写窗体创建 Outlook 外接程序中所述。

在 Outlook 中,用户可以创建文本、HTML 或 RTF 格式的邮件,还可以创建 HTML 格式的约会。 在插入数据之前,必须先通过调用 getTypeAsync来验证支持的项格式,因为可能需要执行其他步骤。 返回的值 getTypeAsync 取决于原始项目格式,以及设备操作系统和应用程序的支持,以 HTML 格式进行编辑。 验证项格式后,设置 coercionTypesetSelectedDataAsync 参数prependAsync以相应地插入数据,如下表所示。 如果未指定参数, prependAsyncsetSelectedDataAsync 假定要插入的数据采用文本格式。

要插入的数据 getTypeAsync 返回的项目格式 coercionType 要使用的
Text 文本1 文本
HTML 文本1 文本2
文本 HTML 文本/HTML
HTML HTML HTML

注意

1 在平板电脑和智能手机上, getTypeAsync 如果操作系统或应用程序不支持编辑最初以 HTML 格式创建的 HTML 格式的项目,则返回“文本”。

2 如果要插入的数据是 HTML,并且 getTypeAsync 返回当前邮件项的文本类型,则必须将数据重新组织为文本并将 设置为 coercionTypeOffice.CoercionType.Text。 如果只是将 HTML 数据插入到文本格式的项目中,应用程序会将 HTML 标记显示为文本。 如果尝试插入 HTML 数据并将其设置为 coercionTypeOffice.CoercionType.Html,则会收到错误。

除了 coercionType 参数,与 Office JavaScript API 中的大多数异步方法一样, getTypeAsyncprependAsyncsetSelectedDataAsync 采用其他可选输入参数。 有关如何指定这些可选输入参数的详细信息,请参阅 Office 外接程序中的异步编程中的“将可选参数传递给异步方法”。

在当前光标位置插入数据

本部分演示了一个代码示例,该示例使用 getTypeAsync 验证正在撰写的项的正文类型,然后使用 setSelectedDataAsync 在当前光标位置插入数据。

必须将数据字符串作为输入参数传递给 setSelectedDataAsync。 根据项目正文的类型,您可以相应地将此数据字符串指定为文本或 HTML 格式。 如前所述,可以选择性地指定要在 参数中 coercionType 插入的数据的类型。 若要获取 的状态和结果 setSelectedDataAsync,请将回调函数和可选输入参数传递给 方法,然后从回调的 asyncResult 输出参数中提取所需的信息。 如果方法成功,可以从 属性获取项正文 asyncResult.value 的类型,即“text”或“html”。

如果用户尚未将光标置于项目正文中, setSelectedDataAsync 则在正文顶部插入数据。 如果用户在项目正文中选择了文本, setSelectedDataAsync 请将所选文本替换为指定的数据。 请注意, setSelectedDataAsync 如果用户在撰写项目时同时更改光标位置,则可能会失败。 一次最多可以插入 1,000,000 个字符。

let item;

// Confirms that the Office.js library is loaded.
Office.onReady((info) => {
    if (info.host === Office.HostType.Outlook) {
        item = Office.context.mailbox.item;
        setItemBody();
    }
});

// Inserts data at the current cursor position.
function setItemBody() {
    // Identify the body type of the mail item.
    item.body.getTypeAsync((asyncResult) => {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            console.log(asyncResult.error.message);
            return;
        }

        // Insert data of the appropriate type into the body.
        if (asyncResult.value === Office.CoercionType.Html) {
            // Insert HTML into the body.
            item.body.setSelectedDataAsync(
                "<b> Kindly note we now open 7 days a week.</b>",
                { coercionType: Office.CoercionType.Html, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
        else {
            // Insert plain text into the body.
            item.body.setSelectedDataAsync(
                "Kindly note we now open 7 days a week.",
                { coercionType: Office.CoercionType.Text, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
    });
}

在项正文的开头插入数据

或者,可以使用 prependAsync 在项正文的开头插入数据,并忽略当前光标位置。 除了插入点, prependAsyncsetSelectedDataAsync 的行为方式类似。 必须首先检查邮件正文的类型,以避免在文本格式的邮件前面附加 HTML 数据。 然后,将要以文本或 HTML 格式开头的数据字符串传递给 prependAsync。 一次最多可以预置 1,000,000 个字符。

以下 JavaScript 代码首先调用 getTypeAsync 以验证项正文的类型。 然后,根据类型,它会将数据作为 HTML 或文本插入到正文顶部。

let item;

// Confirms that the Office.js library is loaded.
Office.onReady((info) => {
    if (info.host === Office.HostType.Outlook) {
        item = Office.context.mailbox.item;
        prependItemBody();
    }
});


// Prepends data to the body of the item being composed.
function prependItemBody() {
    // Identify the body type of the mail item.
    item.body.getTypeAsync((asyncResult) => {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            console.log(asyncResult.error.message);
            return;
        }

        // Prepend data of the appropriate type to the body.
        if (asyncResult.value === Office.CoercionType.Html) {
            // Prepend HTML to the body.
            item.body.prependAsync(
                '<b>Greetings!</b>',
                { coercionType: Office.CoercionType.Html, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
        else {
            // Prepend plain text to the body.
            item.body.prependAsync(
                'Greetings!',
                { coercionType: Office.CoercionType.Text, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
    });
}

另请参阅