在 Outlook 中撰写约会或邮件时将数据插入到正文中
使用 (Body.getAsync、 Body.getTypeAsync、 Body.prependAsync、 Body.setAsync 和 Body.setSelectedDataAsync) 异步方法来获取正文类型并在撰写的约会或邮件的正文中插入数据。 这些异步方法仅适用于撰写加载项。若要使用这些方法,请确保已正确设置外接程序清单,以便 Outlook 在撰写窗体中激活加载项,如 为撰写窗体创建 Outlook 外接程序中所述。
在 Outlook 中,用户可以创建文本、HTML 或 RTF 格式的邮件,还可以创建 HTML 格式的约会。 在插入数据之前,必须先通过调用 getTypeAsync
来验证支持的项格式,因为可能需要执行其他步骤。 返回的值 getTypeAsync
取决于原始项目格式,以及设备操作系统和应用程序的支持,以 HTML 格式进行编辑。 验证项格式后,设置 coercionType
或 setSelectedDataAsync
参数prependAsync
以相应地插入数据,如下表所示。 如果未指定参数, prependAsync
则 setSelectedDataAsync
假定要插入的数据采用文本格式。
要插入的数据 | getTypeAsync 返回的项目格式 | coercionType 要使用的 |
---|---|---|
Text | 文本1 | 文本 |
HTML | 文本1 | 文本2 |
文本 | HTML | 文本/HTML |
HTML | HTML | HTML |
注意
1 在平板电脑和智能手机上, getTypeAsync
如果操作系统或应用程序不支持编辑最初以 HTML 格式创建的 HTML 格式的项目,则返回“文本”。
2 如果要插入的数据是 HTML,并且 getTypeAsync
返回当前邮件项的文本类型,则必须将数据重新组织为文本并将 设置为 coercionType
Office.CoercionType.Text
。 如果只是将 HTML 数据插入到文本格式的项目中,应用程序会将 HTML 标记显示为文本。 如果尝试插入 HTML 数据并将其设置为 coercionType
Office.CoercionType.Html
,则会收到错误。
除了 coercionType
参数,与 Office JavaScript API 中的大多数异步方法一样, getTypeAsync
、 prependAsync
和 setSelectedDataAsync
采用其他可选输入参数。 有关如何指定这些可选输入参数的详细信息,请参阅 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
在项正文的开头插入数据,并忽略当前光标位置。 除了插入点, prependAsync
和 setSelectedDataAsync
的行为方式类似。 必须首先检查邮件正文的类型,以避免在文本格式的邮件前面附加 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.
*/
});
}
});
}