Office.Binding interface
表示对文档部分的绑定。
Binding 对象公开所有绑定所拥有的功能,而不管类型如何。
从不直接调用 Binding 对象。 它是对象的抽象父类,表示每种类型的绑定: Office.MatrixBinding、 Office.TableBinding 或 Office.TextBinding。 这三个对象都从 Binding 对象继承 getDataAsync 和 setDataAsync 方法,这些方法使你能够与绑定中的数据进行交互。 它们还继承用于查询这些属性值的 ID 和类型属性。 此外,MatrixBinding 和 TableBinding 对象揭示特定于矩阵和表的功能的其他方法,如对行和列计数。
注解
应用程序:Word,Excel (已弃用,改用 Excel.Binding)
要求集:
属性
document | 获取与绑定关联的 Document 对象。 |
id | 在同一 Office.Document 对象中的绑定之间唯一标识此绑定的字符串。 |
type | 获取绑定的类型。 |
方法
add |
将事件处理程序添加到指定 Office.EventType 的 对象。 支持的 EventType 为 |
add |
将事件处理程序添加到指定 Office.EventType 的 对象。 支持的 EventType 为 |
get |
返回绑定中包含的数据。 |
get |
返回绑定中包含的数据。 |
remove |
从绑定移除指定事件类型的指定处理程序。 |
remove |
从绑定移除指定事件类型的指定处理程序。 |
set |
将数据写入指定的绑定对象表示的文档的绑定部分。 |
set |
将数据写入指定的绑定对象表示的文档的绑定部分。 |
属性详细信息
document
获取与绑定关联的 Document 对象。
document: Office.Document;
属性值
示例
Office.context.document.bindings.getByIdAsync("myBinding", function (asyncResult) {
write(asyncResult.value.document.url);
});
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
id
在同一 Office.Document 对象中的绑定之间唯一标识此绑定的字符串。
id: string;
属性值
string
示例
Office.context.document.bindings.getByIdAsync("myBinding", function (asyncResult) {
write(asyncResult.value.id);
});
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
type
获取绑定的类型。
type: Office.BindingType;
属性值
示例
Office.context.document.bindings.getByIdAsync("MyBinding", function (asyncResult) {
write(asyncResult.value.type);
})
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
方法详细信息
addHandlerAsync(eventType, handler, options, callback)
将事件处理程序添加到指定 Office.EventType 的 对象。 支持的 EventType 为 Office.EventType.BindingDataChanged
和 Office.EventType.BindingSelectionChanged
。
addHandlerAsync(eventType: Office.EventType, handler: any, options?: Office.AsyncContextOptions, callback?: (result: Office.AsyncResult<void>) => void): void;
参数
- eventType
- Office.EventType
事件类型。 对于绑定,它可以是 Office.EventType.BindingDataChanged
或 Office.EventType.BindingSelectionChanged
。
- handler
-
any
要添加的事件处理程序函数,其唯一的参数类型为 Office.BindingDataChangedEventArgs 或 Office.BindingSelectionChangedEventArgs。
- options
- Office.AsyncContextOptions
提供一个选项,用于保留任何类型的上下文数据(不变),以便在回调中使用。
- callback
-
(result: Office.AsyncResult<void>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。
返回
void
注解
要求集: BindingEvents
只要每个事件处理程序函数的名称唯一,就可以为指定的 eventType 添加多个事件处理程序。
addHandlerAsync(eventType, handler, callback)
将事件处理程序添加到指定 Office.EventType 的 对象。 支持的 EventType 为 Office.EventType.BindingDataChanged
和 Office.EventType.BindingSelectionChanged
。
addHandlerAsync(eventType: Office.EventType, handler: any, callback?: (result: Office.AsyncResult<void>) => void): void;
参数
- eventType
- Office.EventType
事件类型。 对于绑定,它可以是 Office.EventType.BindingDataChanged
或 Office.EventType.BindingSelectionChanged
。
- handler
-
any
要添加的事件处理程序函数,其唯一的参数类型为 Office.BindingDataChangedEventArgs 或 Office.BindingSelectionChangedEventArgs。
- callback
-
(result: Office.AsyncResult<void>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。
返回
void
注解
要求集: BindingEvents
只要每个事件处理程序函数的名称唯一,就可以为指定的 eventType 添加多个事件处理程序。
示例
// The following code sample calls the select function of the Office object to access the binding
// with ID "MyBinding", and then calls the addHandlerAsync method to add a handler function
// for the bindingDataChanged event of that binding.
function addEventHandlerToBinding() {
Office.select("bindings#MyBinding").addHandlerAsync(
Office.EventType.BindingDataChanged, onBindingDataChanged);
}
function onBindingDataChanged(eventArgs) {
write("Data has changed in binding: " + eventArgs.binding.id);
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
// To add an event handler for the BindingSelectionChanged event of a binding,
// use the addHandlerAsync method of the Binding object.
// The event handler receives an argument of type BindingSelectionChangedEventArgs.
function addEventHandlerToBinding() {
Office.select("bindings#MyBinding").addHandlerAsync(
Office.EventType.BindingSelectionChanged, onBindingSelectionChanged);
}
function onBindingSelectionChanged(eventArgs) {
write(eventArgs.binding.id + " has been selected.");
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
getDataAsync(options, callback)
返回绑定中包含的数据。
getDataAsync<T>(options?: GetBindingDataOptions, callback?: (result: AsyncResult<T>) => void): void;
参数
- options
- Office.GetBindingDataOptions
提供有关如何获取绑定中的数据的选项。
- callback
-
(result: Office.AsyncResult<T>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。 value
结果的 属性是指定绑定中的值。 coercionType
如果 (指定参数,并且调用成功) ,则数据将采用 CoercionType 枚举主题中所述的格式返回。
返回
void
注解
要求集:
使用
Office.CoercionType.Html
) 时 htmlCoercion (使用
Office.CoercionType.Matrix
) 时,MatrixCoercion (使用
Office.CoercionType.Ooxml
) 时 OoxmlCoercion (使用
Office.CoercionType.Table
) 时的 TableCoercion (使用
Office.CoercionType.Text
) 时 TextCoercion (
从 MatrixBinding 或 TableBinding 调用时,如果 (指定了可选的 startRow、startColumn、rowCount 和 columnCount 参数,并且它们指定了连续且有效的范围) ,则 getDataAsync 方法将返回绑定值的子集。
getDataAsync(callback)
返回绑定中包含的数据。
getDataAsync<T>(callback?: (result: AsyncResult<T>) => void): void;
参数
- callback
-
(result: Office.AsyncResult<T>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。 value
结果的 属性是指定绑定中的值。 coercionType
如果 (指定参数,并且调用成功) ,则数据将采用 CoercionType 枚举主题中所述的格式返回。
返回
void
注解
要求集:
使用
Office.CoercionType.Html
) 时 htmlCoercion (使用
Office.CoercionType.Matrix
) 时,MatrixCoercion (使用
Office.CoercionType.Ooxml
) 时 OoxmlCoercion (使用
Office.CoercionType.Table
) 时的 TableCoercion (使用
Office.CoercionType.Text
) 时 TextCoercion (
从 MatrixBinding 或 TableBinding 调用时,如果 (指定了可选的 startRow、startColumn、rowCount 和 columnCount 参数,并且它们指定了连续且有效的范围) ,则 getDataAsync 方法将返回绑定值的子集。
示例
function showBindingData() {
Office.select("bindings#MyBinding").getDataAsync(function (asyncResult) {
write(asyncResult.value)
});
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
// There is an important difference in behavior between using the "table" and "matrix" coercionType with the
// Binding.getDataAsync method, with respect to data formatted with header rows, as shown in the following
// two examples. These code examples show event handler functions for the Binding.SelectionChanged event.
// If you specify the "table" coercionType, the TableData.rows property ( result.value.rows in the following
// code example) returns an array that contains only the body rows of the table. So, its 0th row will be the
// first non-header row in the table.
function selectionChanged(evtArgs) {
Office.select("bindings#TableTranslate").getDataAsync(
{ coercionType: 'table',
startRow: evtArgs.startRow,
startCol: 0,
rowCount: 1,
columnCount: 1 },
function (result) {
if (result.status == 'succeeded') {
write("Image to find: " + result.value.rows[0][0]);
}
else
write(result.error.message);
});
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
// However, if you specify the "matrix" coercionType, result.value in the following code example returns an array
// that contains the table header in the 0th row. If the table header contains multiple rows, then these are all
// included in the result.value matrix as separate rows before the table body rows are included.
function selectionChanged(evtArgs) {
Office.select("bindings#TableTranslate").getDataAsync(
{ coercionType: 'matrix',
startRow: evtArgs.startRow,
startCol: 0,
rowCount: 1,
columnCount: 1 },
function (result) {
if (result.status == 'succeeded') {
write("Image to find: " + result.value[1][0]);
}
else
write(result.error.message);
});
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
removeHandlerAsync(eventType, options, callback)
从绑定移除指定事件类型的指定处理程序。
removeHandlerAsync(eventType: Office.EventType, options?: RemoveHandlerOptions, callback?: (result: AsyncResult<void>) => void): void;
参数
- eventType
- Office.EventType
事件类型。 对于绑定,它可以是 Office.EventType.BindingDataChanged
或 Office.EventType.BindingSelectionChanged
。
- options
- Office.RemoveHandlerOptions
提供用于确定删除哪些事件处理程序的选项。
- callback
-
(result: Office.AsyncResult<void>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。
返回
void
注解
要求集: BindingEvents
removeHandlerAsync(eventType, callback)
从绑定移除指定事件类型的指定处理程序。
removeHandlerAsync(eventType: Office.EventType, callback?: (result: AsyncResult<void>) => void): void;
参数
- eventType
- Office.EventType
事件类型。 对于绑定,它可以是 Office.EventType.BindingDataChanged
或 Office.EventType.BindingSelectionChanged
。
- callback
-
(result: Office.AsyncResult<void>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。
返回
void
注解
要求集: BindingEvents
示例
function removeEventHandlerFromBinding() {
Office.select("bindings#MyBinding").removeHandlerAsync(
Office.EventType.BindingDataChanged, {handler:onBindingDataChanged});
}
setDataAsync(data, options, callback)
将数据写入指定的绑定对象表示的文档的绑定部分。
setDataAsync(data: TableData | any, options?: SetBindingDataOptions, callback?: (result: AsyncResult<void>) => void): void;
参数
- data
-
Office.TableData | any
当前选择中要设置的数据。 按 Office 应用程序分类的可能数据类型:
字符串:Excel web 版和 Windows,以及仅在 Web 和 Windows 上Word
数组数组:仅限 Excel 和 Word
Office.TableData:仅限 Excel 和 Word
HTML:仅在 Web 和 Windows 上Word
Office Open XML:仅限Word
- options
- Office.SetBindingDataOptions
提供有关如何在绑定中设置数据的选项。
- callback
-
(result: Office.AsyncResult<void>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。
返回
void
注解
要求集:
使用
Office.CoercionType.Html
) 时 htmlCoercion (使用
Office.CoercionType.Matrix
) 时,MatrixCoercion (使用
Office.CoercionType.Ooxml
) 时 OoxmlCoercion (使用
Office.CoercionType.Table
) 时的 TableCoercion (使用
Office.CoercionType.Text
) 时 TextCoercion (
为数据传递的值包含要在绑定中写入的数据。 传递的值的类型决定将要写入的内容,如下表中所示。
data 值 | 写入的数据 |
---|---|
字符串 | 将写入纯文本或可强制转换为字符串的任何内容。 |
数组的数组(“矩阵”) | 将写入不带标题的表格数据。 例如,若要将数据写入三行两列,可以传递如下的数组:\[\["R1C1", "R1C2"\], \["R2C1", "R2C2"\], \["R3C1", "R3C2"\]\] 。 若要编写包含三行的单列,请传递如下所示的数组: \[\["R1C1"\], \["R2C1"\], \["R3C1"\]\] 。 |
对象TableData | 将写入带标题的表格数据。 |
此外,这些特定于应用程序的操作在将数据写入绑定时适用。 对于Word,指定的数据将写入绑定,如下所示。
data 值 | 写入的数据 |
---|---|
字符串 | 写入指定的文本。 |
数组 (“matrix”) 或 TableData 对象 | 写入 Word 表格。 |
HTML | 写入指定的 HTML。 如果您写入的任何 HTML 均有效,则 Word 将引发错误。 Word 将尽可能多的写入 HTML,并将省略任何无效数据。 |
Office Open XML ("Open XML") | 写入指定的 XML。 |
对于 Excel,指定的数据将写入绑定,如下所示。
data 值 | 写入的数据 |
---|---|
字符串 | 指定文本将作为第一个绑定单元格的值插入。 您还可以指定一个有效公式,将该公式添加到绑定单元格。 例如,将 data 设置为 "=SUM(A1:A5)" 将计算指定范围中值的总数。 但是,当在绑定单元格中设置公式时,设置后将无法从绑定单元格读取添加的公式(或任何已有公式)。 如果您在绑定单元格上调用 Binding.getDataAsync 方法以读取其数据,方法可能仅返回在单元格中显示的数据(即公式的结果)。 |
数组的数组(“矩阵”),形状与指定绑定的形状完全匹配 | 写入行和列集。还可以指定包含有效公式的数组数组,以将它们添加到绑定单元格。 例如,将数据设置为 会将 \[\["=SUM(A1:A5)","=AVERAGE(A1:A5)"\]\] 这两个公式添加到包含两个单元格的绑定中。 就像在单个绑定单元格上设置公式一样,无法使用 方法从绑定 Binding.getDataAsync ) 读取添加的公式 (或任何预先存在的公式 - 它仅返回绑定单元格中显示的数据。 |
对象 TableData ,表格的形状与绑定表匹配 | 写入一组指定的行和/或标题(如果不会覆盖周围单元格中的其他数据)。 **注意**:如果在为 *data* 参数传递的对象中 TableData 指定公式,则可能由于 Excel 的“计算列”功能而无法获得预期的结果,该功能会自动复制列中的公式。 若要在要将包含公式的 *data* 写入绑定表中时解决此问题,请尝试将数据指定为数组数组 (而不是 TableData 对象) ,并将 *coercionType* 指定为 Microsoft.Office.Matrix 或“matrix”。 |
对于Excel web 版:
在对此方法的单个调用中,传递给数据参数的值中的单元格总数不能超过 20,000。
传递给 cellFormat 参数的格式设置组数不能超过 100。 每个格式设置组由应用于特定单元格范围的一组格式组成。
在其他所有情况下,都会返回错误。
如果指定了可选的 startRow 和 startColumn 参数,并且它们指定了有效的范围,setDataAsync 方法将在表或矩阵绑定的子集中写入数据。
在传递给 setDataAsync 方法的回调函数中,您可以使用 AsyncResult 对象的属性返回以下信息。
属性 | 用途 |
---|---|
AsyncResult.value | 始终返回 , undefined 因为没有要检索的对象或数据。 |
AsyncResult.status | 确定操作是成功还是失败。 |
AsyncResult.error | 如果操作失败,则访问提供错误信息的 Error 对象。 |
AsyncResult.asyncContext | 定义在 AsyncResult 对象中返回的任何类型的项,而不进行更改。 |
setDataAsync(data, callback)
将数据写入指定的绑定对象表示的文档的绑定部分。
setDataAsync(data: TableData | any, callback?: (result: AsyncResult<void>) => void): void;
参数
- data
-
Office.TableData | any
当前选择中要设置的数据。 按 Office 应用程序分类的可能数据类型:
字符串:在 Windows 上Excel web 版和,仅在 Web 上和 Windows 上Word
数组数组:仅限 Excel 和 Word
TableData
:仅限 Excel 和 Word
HTML:仅在 Web 和 Windows 上Word
Office Open XML:仅限Word
- callback
-
(result: Office.AsyncResult<void>) => void
可选。 回调返回时调用的函数,其唯一参数的类型为 Office.AsyncResult。
返回
void
注解
要求集:
使用
Office.CoercionType.Html
) 时 htmlCoercion (使用
Office.CoercionType.Matrix
) 时,MatrixCoercion (使用
Office.CoercionType.Ooxml
) 时 OoxmlCoercion (使用
Office.CoercionType.Table
) 时的 TableCoercion (使用
Office.CoercionType.Text
) 时 TextCoercion (
为数据传递的值包含要在绑定中写入的数据。 传递的值的类型决定将要写入的内容,如下表中所示。
data 值 | 写入的数据 |
---|---|
字符串 | 将写入纯文本或可强制转换为字符串的任何内容。 |
数组的数组(“矩阵”) | 将写入不带标题的表格数据。 例如,若要将数据写入三行两列,可以传递如下的数组:\[\["R1C1", "R1C2"\], \["R2C1", "R2C2"\], \["R3C1", "R3C2"\]\] 。 若要编写包含三行的单列,请传递如下所示的数组: \[\["R1C1"\], \["R2C1"\], \["R3C1"\]\] 。 |
对象TableData | 将写入带标题的表格数据。 |
此外,这些特定于应用程序的操作在将数据写入绑定时适用。 对于Word,指定的数据将写入绑定,如下所示。
data 值 | 写入的数据 |
---|---|
字符串 | 写入指定的文本。 |
数组 (“matrix”) 或 TableData 对象 | 写入 Word 表格。 |
HTML | 写入指定的 HTML。 如果您写入的任何 HTML 均有效,则 Word 将引发错误。 Word 将尽可能多的写入 HTML,并将省略任何无效数据。 |
Office Open XML ("Open XML") | 写入指定的 XML。 |
对于 Excel,指定的数据将写入绑定,如下所示。
data 值 | 写入的数据 |
---|---|
字符串 | 指定文本将作为第一个绑定单元格的值插入。 您还可以指定一个有效公式,将该公式添加到绑定单元格。 例如,将 data 设置为 "=SUM(A1:A5)" 将计算指定范围中值的总数。 但是,当在绑定单元格中设置公式时,设置后将无法从绑定单元格读取添加的公式(或任何已有公式)。 如果在绑定单元格上调用 Binding.getDataAsync 方法来读取其数据,则该方法只能返回单元格中显示的数据, (公式的结果) 。 |
数组的数组(“矩阵”),形状与指定绑定的形状完全匹配 | 写入行和列集。还可以指定包含有效公式的数组数组,以将它们添加到绑定单元格。 例如,将数据设置为 会将 \[\["=SUM(A1:A5)","=AVERAGE(A1:A5)"\]\] 这两个公式添加到包含两个单元格的绑定中。 就像在单个绑定单元格上设置公式一样,无法使用 方法从绑定 Binding.getDataAsync ) 读取添加的公式 (或任何预先存在的公式 - 它仅返回绑定单元格中显示的数据。 |
对象 TableData ,表格的形状与绑定表匹配 | 写入一组指定的行和/或标题(如果不会覆盖周围单元格中的其他数据)。 **注意**:如果在为 *data* 参数传递的对象中 TableData 指定公式,则可能由于 Excel 的“计算列”功能而无法获得预期的结果,该功能会自动复制列中的公式。 若要在要将包含公式的 *data* 写入绑定表中时解决此问题,请尝试将数据指定为数组数组 (而不是 TableData 对象) ,并将 *coercionType* 指定为 Microsoft.Office.Matrix 或“matrix”。 |
对于Excel web 版:
在对此方法的单个调用中,传递给数据参数的值中的单元格总数不能超过 20,000。
传递给 cellFormat 参数的格式设置组数不能超过 100。 每个格式设置组由应用于特定单元格范围的一组格式组成。
在其他所有情况下,都会返回错误。
如果指定了可选的 startRow 和 startColumn 参数,并且它们指定了有效的范围,setDataAsync 方法将在表或矩阵绑定的子集中写入数据。
在传递给 setDataAsync 方法的回调函数中,您可以使用 AsyncResult 对象的属性返回以下信息。
属性 | 用途 |
---|---|
AsyncResult.value | 始终返回 , undefined 因为没有要检索的对象或数据。 |
AsyncResult.status | 确定操作是成功还是失败。 |
AsyncResult.error | 如果操作失败,则访问提供错误信息的 Error 对象。 |
AsyncResult.asyncContext | 定义在 AsyncResult 对象中返回的任何类型的项,而不进行更改。 |
示例
function setBindingData() {
Office.select("bindings#MyBinding").setDataAsync('Hello World!', function (asyncResult) { });
}
// Specifying the optional coercionType parameter lets you specify the kind of data you want to write to a binding.
// For example, in Word if you want to write HTML to a text binding, you can specify the coercionType parameter
// as "html" as shown in the following example, which uses HTML <b> tags to make "Hello" bold.
function writeHtmlData() {
Office.select("bindings#myBinding").setDataAsync(
"<b>Hello</b> World!", {coercionType: "html"}, function (asyncResult) {
if (asyncResult.status == "failed") {
write('Error: ' + asyncResult.error.message);
}
});
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
// In this example, the call to setDataAsync passes the data parameter as an array of arrays
// (to create a single column of three rows), and specifies the data structure with the
// coercionType parameter as a "matrix".
function writeBoundDataMatrix() {
Office.select("bindings#myBinding").setDataAsync(
[['Berlin'],['Munich'],['Duisburg']],{ coercionType: "matrix" }, function (asyncResult) {
if (asyncResult.status == "failed") {
write('Error: ' + asyncResult.error.message);
} else {
write('Bound data: ' + asyncResult.value);
}
});
}
// Function that writes to a div with id='message' on the page.
function write(message){
document.getElementById('message').innerText += message;
}
// In the writeBoundDataTable function in this example, the call to setDataAsync passes the data parameter
// as a TableData object (to write three columns and three rows), and specifies the data structure
// with the coercionType parameter as a "table".
// In the updateTableData function, the call to setDataAsync again passes the data parameter as a TableData object,
// but as a single column with a new header and three rows, to update the values in the last column
// of the table created with the writeBoundDataTable function. The optional zero-based startColumn parameter
// is specified as 2 to replace the values in the third column of the table.
function writeBoundDataTable() {
// Create a TableData object.
const myTable = new Office.TableData();
myTable.headers = ['First Name', 'Last Name', 'Grade'];
myTable.rows = [['Kim', 'Abercrombie', 'A'], ['Junmin','Hao', 'C'],['Toni','Poe','B']];
// Set myTable in the binding.
Office.select("bindings#myBinding").setDataAsync(myTable, { coercionType: "table" },
function (asyncResult) {
if (asyncResult.status == Office.AsyncResultStatus.Failed) {
write('Error: '+ asyncResult.error.message);
} else {
write('Bound data: ' + asyncResult.value);
}
});
}
// Replace last column with different data.
function updateTableData() {
const newTable = new Office.TableData();
newTable.headers = ["Gender"];
newTable.rows = [["M"],["M"],["F"]];
Office.select("bindings#myBinding").setDataAsync(newTable, { coercionType: "table", startColumn:2 },
function (asyncResult) {
if (asyncResult.status == Office.AsyncResultStatus.Failed) {
write('Error: '+ asyncResult.error.message);
} else {
write('Bound data: ' + asyncResult.value);
}
});
}
// In this example, the following call passes two formatting groups to cellFormat.
Office.select("bindings#myBinding").setDataAsync([['Berlin'],['Munich'],['Duisburg']],
{cellFormat:[{cells: {row: 1}, format: {fontColor: "yellow"}},
{cells: {row: 3, column: 4}, format: {borderColor: "white", fontStyle: "bold"}}]},
function (asyncResult){});