Skip to main content

Microsoft Office

Overview

The Excel Adapter provides user defined functions (UDFs) which you can use in Excel formulas to exchange data with the io.Connect platform - receiving data from and sending data to io.Connect Channels, shared contexts, and Interop methods and streams, binding ranges to Channels and contexts, raising notifications, and more.

The names of all io.Connect UDFs start with IOXL_. You can find them in the Excel Insert Function dialog together with a description of each function and its parameters.

Most io.Connect UDFs are real-time data (RTD) functions - they keep an active subscription to the respective io.Connect Channel, shared context, Interop stream, or Interop method. The cell first shows a status message (e.g., "Subscribed to channel Red") and then updates automatically when new data arrives.

⚠️ Note that the Excel Adapter must be connected to the io.Connect platform for the io.Connect UDFs to work.

Field Paths

Many io.Connect UDFs accept field paths for extracting or setting values in objects. A field path is a dot-separated list of property names. For instance, the "data.instrument.ric" field path points to the ric property of the following object:

{
    "data": {
        "instrument": {
            "ric": "VOD.L"
        }
    }
}

Volatile UDFs

Excel recalculates volatile functions each time any cell in the workbook changes. To register a volatile version of an io.Connect UDF, add its name to the "volatile-udfs" property of the Excel Adapter settings. The volatile version of the UDF has a _Vol suffix (e.g., IOXL_Invoke_Vol).

Custom UDFs

You can register your own UDFs written in C# via the Excel service configuration or at runtime via the registerUDF() method of the Excel API.

Receiving Data

IOXL_Channel

Joins an io.Connect Channel and shows the value of a field from the Channel context. The cell is updated each time the Channel context is updated.

=IOXL_Channel(channelName, outputPath)
Parameter Type Description
channelName string Required. Name of the Channel to join.
outputPath string Field path to the value to show.
filterPath string Reserved for future use.
filterValue string Reserved for future use.

Example:

=IOXL_Channel("Red", "data.contact.name.firstName")

IOXL_Context

Shows the value of a field from an io.Connect shared context. The cell is updated each time the context is updated.

=IOXL_Context(contextName, outputPath)
Parameter Type Description
contextName string Required. Name of the shared context.
outputPath string Field path to the value to show.
filterPath string Reserved for future use.
filterValue string Reserved for future use.

Example:

=IOXL_Context("Portfolio", "positions.total")

IOXL_Subscribe

Subscribes to an io.Connect Interop stream and shows the value of a field from the stream data. The cell is updated each time new data is published on the stream.

=IOXL_Subscribe(streamName, outputPath, filterPath, filterValue, jsonData)
Parameter Type Description
streamName string Required. Name of the Interop stream.
outputPath string Field path to the value to show.
filterPath string Field path to a value in the stream data. If specified, the cell will be updated only when this value is equal to filterValue.
filterValue string Value to compare with the value at filterPath.
jsonData string Subscription arguments as a JSON string.

Example:

=IOXL_Subscribe("Prices", "data.last", "symbol", "MSFT")

IOXL_Method

Registers an io.Connect Interop method. When another app invokes the method, the cell shows the value of a field from the invocation arguments. You can use the same method name in multiple cells to show different fields.

=IOXL_Method(methodName, outputPath, filterPath, filterValue)
Parameter Type Description
methodName string Required. Name for the Interop method.
outputPath string Field path to the value to show.
filterPath string Field path to a value in the invocation arguments. If specified, the cell will be updated only when this value is equal to filterValue.
filterValue string Value to compare with the value at filterPath.

Example:

=IOXL_Method("Excel.ReceiveOrder", "order.id")

Sending Data

IOXL_SendData

Sends data from an Excel range to an io.Connect Channel, shared context, Interop method, or Interop stream.

=IOXL_SendData(targetType, target, targetPath, dataRange, isStructuredData, isJsonData, dataOrientation, argsNames, resultFieldPath, outputRange, gateAddress)
Parameter Type Description
targetType string Required. Type of the target. Can be "Channel", "Context", "Method", or "Stream".
target string Required. Name of the Channel, shared context, Interop method, or Interop stream.
targetPath string Required. Field path where to set the data.
dataRange range Required. Range containing the data to send.
isStructuredData boolean If TRUE, the first row of the range will be used as property names and the rows below it as values. Defaults to FALSE.
isJsonData boolean If TRUE, the cell values will be parsed as JSON. Defaults to FALSE.
dataOrientation string Reserved for future use.
argsNames range Row containing property names to use instead of the first row of dataRange.
resultFieldPath string Field path to the value to show from the result of the Interop method. Valid only for Interop methods.
outputRange range Range in which to write the result of the Interop method. Requires gateAddress. Valid only for Interop methods.
gateAddress range Reference to a cell. The data will be sent only when the value of this cell changes. Use it to prevent sending the same data each time Excel recalculates.

Examples:

=IOXL_SendData("Channel", "Red", "instrument.ric", A2)
=IOXL_SendData("Context", "Portfolio", "positions", A1:C10, TRUE)

IOXL_Invoke

Invokes an io.Connect Interop method with data from an Excel range and shows the result.

=IOXL_Invoke(endpoint, dataRange, isJsonData, dataOrientation, argsNames, resultFieldPath, outputRange, gateAddress)
Parameter Type Description
endpoint string Required. Name of the Interop method.
dataRange range Required. Range containing the method arguments. The first row is used as argument names and the rows below it as values.
isJsonData boolean If TRUE, the cell values will be parsed as JSON. Defaults to FALSE.
dataOrientation string Reserved for future use.
argsNames range Row containing argument names to use instead of the first row of dataRange.
resultFieldPath string Field path to the value to show from the method result.
outputRange range Range in which to write the method result. Requires gateAddress.
gateAddress range Reference to a cell. The method will be invoked only when the value of this cell changes. Use it to prevent invoking the method each time Excel recalculates.

Example:

=IOXL_Invoke("Orders.Lookup", A1:B2, FALSE, , , "result.status")

IOXL_CreateStream

Registers an io.Connect Interop stream. To publish data on the stream, use IOXL_SendData() with "Stream" as a target type.

=IOXL_CreateStream(endpoint)
Parameter Type Description
endpoint string Required. Name for the Interop stream. Use lowercase letters.

Example:

=IOXL_CreateStream("excel.prices")
=IOXL_SendData("Stream", "excel.prices", "prices", A1:B10)

Binding Ranges

IOXL_BindRegion

Binds an Excel range to an io.Connect Channel, shared context, Interop method, or Interop stream. When the user selects or right-clicks a row in the range, data from that row is sent to the target. Right-clicking a bound range doesn't open the Excel context menu.

=IOXL_BindRegion(eventName, dataRange, target, updateFieldPath, column, glueTargetType, jsonTemplate, methodTargetType)
Parameter Type Description
eventName string Required. User action that triggers sending the data. Can be "selectionChange" or "rightClick".
dataRange range Required. Range to bind.
target string Required. Name of the Channel, shared context, Interop method, or Interop stream.
updateFieldPath string Required. Field path where to set the data.
column number Position (1-based) of the column within the range whose value to send. Set to 0 to send the values of the entire row. Defaults to 1.
glueTargetType string Type of the target. Can be "Channel", "Context", "Method", or "Stream". Defaults to "Channel".
jsonTemplate string Template for the data to send. Use $0 to insert the value of the cell in the specified column (or of the first cell of the row when column is 0). When column is 0, use $1, $2, etc. to insert the values of the row cells. Values are inserted as JSON values (strings are quoted). Use $$0, $$1, etc. to insert the cell values as raw JSON. For instance, "id": $1, "price": $$2.
methodTargetType string Interop servers on which to invoke the Interop method. Can be "All", "Any", "AllButMe", or "AnyButMe". Defaults to "All".

Examples:

=IOXL_BindRegion("selectionChange", A2:C20, "Red", "instrument.ric", 1)
=IOXL_BindRegion("rightClick", A2:C20, "Portfolio", "selected", 0, "Context", """id"": $1, ""price"": $$2")

IOXL_RegionSelection2Channel

Sends a value to an io.Connect Channel when the user selects a row in an Excel range. Equivalent to IOXL_BindRegion() with "selectionChange" as an event name and "Channel" as a target type.

=IOXL_RegionSelection2Channel(dataRange, channelName, updateFieldPath, column)
Parameter Type Description
dataRange range Required. Range to bind.
channelName string Required. Name of the Channel.
updateFieldPath string Required. Field path where to set the data.
column number Position (1-based) of the column within the range whose value to send. Defaults to 1.

Example:

=IOXL_RegionSelection2Channel(A2:C20, "Red", "instrument.ric", 1)

IOXL_RightClick2Channel

Sends a value to an io.Connect Channel when the user right-clicks a row in an Excel range. Equivalent to IOXL_BindRegion() with "rightClick" as an event name and "Channel" as a target type.

=IOXL_RightClick2Channel(dataRange, channelName, updateFieldPath, column)
Parameter Type Description
dataRange range Required. Range to bind.
channelName string Required. Name of the Channel.
updateFieldPath string Required. Field path where to set the data.
column number Position (1-based) of the column within the range whose value to send. Defaults to 1.

Example:

=IOXL_RightClick2Channel(A2:C20, "Red", "instrument.ric", 1)

IOXL_Region

Adds a context menu to an Excel range. The menu lists the available Interop methods whose names match the specified filters. When the user right-clicks a row in the range and selects a method, the method is invoked with the values of the row as arguments.

=IOXL_Region(methodFilters, menuRegion, menuRegionOrientation, menuContainsHeaders, menuContainsData, contextMenuCaption, dataRegion, dataRegionOrientation, dataContainsHeaders, headersRegion, headersOrientation, tooltip)
Parameter Type Description
methodFilters string Required. Comma-separated names of the Interop methods to show in the context menu.
menuRegion range Required. Range in which the context menu will be available.
menuRegionOrientation string Orientation of the data in menuRegion. Can be "Horizontal" (headers in the first row) or "Vertical" (headers in the first column).
menuContainsHeaders boolean If TRUE, the first row (or column) of menuRegion contains the argument names.
menuContainsData boolean If TRUE, the method arguments will be taken from menuRegion.
contextMenuCaption string Caption for the context menu.
dataRegion range Separate range from which to take the method arguments.
dataRegionOrientation string Orientation of the data in dataRegion. Can be "Horizontal" or "Vertical".
dataContainsHeaders boolean If TRUE, the first row (or column) of dataRegion contains the argument names.
headersRegion range Separate range containing the argument names.
headersOrientation string Orientation of the data in headersRegion. Can be "Horizontal" or "Vertical".
tooltip string Tooltip for the context menu.

Example:

=IOXL_Region("Orders.Open", A1:C20, "Horizontal", TRUE, TRUE, "Orders", , "Horizontal", FALSE, , "Horizontal", "Open order")

IOXL_RegisterSearchProvider

Registers an Excel range as an io.Connect search provider. Apps using the io.Connect search can then find values from the range.

=IOXL_RegisterSearchProvider(dataRange, providerName, prefix, types)
Parameter Type Description
dataRange range Required. Range containing the searchable data. The first column is used as a result ID, the second as a display name, and the third as a description.
providerName string Required. Name for the search provider. If empty, defaults to "<sheet-name>:<range-address>".
prefix string If specified, the search provider will handle only queries starting with this prefix.
types string Comma-separated search types handled by the search provider.

Example:

=IOXL_RegisterSearchProvider(A2:C100, "ExcelInstruments", "xl:", "instrument")

IOXL_QuerySearch

Executes an io.Connect search query. The cell shows the query status. To show the results, use IOXL_ReadRTDCache() with a reference to the cell containing the query.

=IOXL_QuerySearch(searchTarget, outputPath, filterTypes)
Parameter Type Description
searchTarget string Required. Search query.
outputPath string Reserved for future use.
filterTypes string Comma-separated search types by which to filter the results.

Example:

A1: =IOXL_QuerySearch("IBM", "", "instrument")
B1: =IOXL_ReadRTDCache(A1)

Notifications

IOXL_RaiseNotification

Raises an io.Connect notification.

=IOXL_RaiseNotification(title, category, description, data, severity, type, actions)
Parameter Type Description
title string Required. Title of the notification.
category string Required. Category of the notification.
description string Required. Description of the notification.
data string Required. Additional data for the notification.
severity string Severity of the notification. Can be "None", "Low", "Medium", "High", or "Critical". Defaults to "Low".
type string Type of the notification. Can be "Notification" or "Alert". Defaults to "Notification".
actions string | range Notification actions. Each action is a string in the format "<method-name>;<display-name>;<description>;<correlation-id>;<action-data>;<image>". Separate multiple actions with | or place them in separate cells of a range. When the user clicks an action, the Interop method specified in <method-name> will be invoked.

The Interop method invoked by a notification action receives the following arguments:

Argument Type Description
actionData string Value of <action-data>.
correlationId string Value of <correlation-id>.
udfAddress string Address of the cell containing the UDF.
workbookName string Name of the active workbook when the notification was raised.
workbookPath string Full path to the active workbook when the notification was raised.
worksheetName string Name of the active worksheet when the notification was raised.

Example:

=IOXL_RaiseNotification("Limit Exceeded", "Risk", "Exposure is above the limit.", "portfolio-123", "High", "Alert", "ShowPortfolio;Show Portfolio;Open the portfolio;portfolio-123")

⚠️ Note that a notification is raised each time Excel recalculates the UDF.

Cached Data

IOXL_ReadRTDCache

Shows the latest data received by another io.Connect UDF. Use it to display objects and arrays, which other io.Connect UDFs can't display in a single cell. The data spills into the neighboring cells.

Works with IOXL_Channel(), IOXL_Context(), IOXL_Subscribe(), IOXL_Method(), and IOXL_QuerySearch().

=IOXL_ReadRTDCache(cacheAddress, fields)
Parameter Type Description
cacheAddress range Required. Reference to the cell containing the io.Connect UDF.
fields string Comma-separated field paths to the values to show. Valid only for IOXL_Subscribe() and IOXL_Method().
emptyValue any Reserved for future use.
nullValue any Reserved for future use.

Example:

A1: =IOXL_Subscribe("Prices", "data")
B1: =IOXL_ReadRTDCache(A1, "data.bid,data.ask")