Interacting with the Excel Web Services API for SharePoint Server 2007
Summary: Get a quick start with the Excel Web Services API, which enables interaction with published Microsoft Office Excel 2007 workbooks in Microsoft Office SharePoint Server 2007 from a remote application. Learn considerations around session state, security, and performance. (6 printed pages)
Spencer Harbar, Microsoft Certified Master, SharePoint MVP, Harbar.net
February 2010
Applies to: Microsoft Office SharePoint Server 2007 Enterprise Edition, Microsoft Office Excel 2007
Contents
Introduction to the Excel Web Services API
What the Excel Web Services API Provides
Session Management and Performance
Security Configuration
Exception Management
Quick Start Example
Conclusion
Additional Resources
Download the code samples that accompany this article:Office SharePoint Server 2007 Excel Services Quick Start.
Note
This quick start article assumes that a Microsoft Office SharePoint Server 2007 dashboard and published Microsoft Office Excel 2007 workbooks are already deployed.
Introduction to the Excel Web Services API
Excel Services within Microsoft Office SharePoint Server 2007 Enterprise Edition provides a variety of rich default capabilities to deliver business intelligence solutions via customization and configuration. In addition to these capabilities, the Excel Web Services API provides you with a broad extensibility model upon which to base custom applications, both within and from outside of Office SharePoint Server 2007.
Excel Calculation Services (ECS) is responsible for performing server-side calculations and enabling browser rendering of Excel Services content. ECS is implemented as a Web service within a shared services provider (SSP) application in Internet Information Services (IIS). This ECS Web service is private and intended for internal use by Excel Web Access. It is not intended that the ECS Web Service is used for custom development.
The Excel Web Services API is available to developers for custom solutions and is exposed by every SharePoint Web application at the following path:
/vti_bin/ExcelService.asmx
(for example, http://
intranet/_vti_bin/ExcelService.asmx)
The Excel Web Services API is essentially a bridge to ECS, enabling developers to interact with ECS without using the Excel Web Access components. One common scenario for the Excel Web Services API is enabling developers to build server-side applications that avoid the need to recode logic contained within an Excel workbook.
To inherit site context and security, the Excel Web Services API should be consumed from the site being worked with (for example, http://
intranet/Reports/_vti_bin/ExcelService.asmx
).
The Excel Web Services API can be consumed by custom applications like any other Web service, but it is important to consider the reliance upon a "user session" when interacting with its methods. The Excel Web Services API makes this easier by exposing a session identifier, which is used in subsequent calls and manages the session state transparently in the background.
What the Excel Web Services API Provides
The Excel Web Services API enables developers to initiate an ECS session and interact with Excel workbooks, including performing calculations in workbook cells. The methods provided are summarized in Table 1.
Table 1. Summary of Excel Web Services API methods
Method | Description | Comment |
---|---|---|
GetApiVersion |
Gets the installed ExcelService API build. |
|
OpenWorkbook |
Opens a server-side calculation session. The method takes a workbook path, user interface (UI) culture name, and data culture name and returns a sessionId. |
|
GetSessionInformation |
Gets properties of the server session, including the language of the session. |
|
SetCell |
Sets a value into a cell on one sheet of the workbook. |
This method has two addressing mechanisms: one takes a cell address ("A22") or a named range ("Cost"), and the other accepts integer coordinates. |
SetRange |
Same as SetCell (sets a value into a cell on one sheet of the workbook), but used for setting values into an entire contiguous range. |
This method has two addressing mechanisms: one takes a cell address ("A22") or a named range ("Cost"), and the other accepts integer coordinates. |
Refresh |
Reads data from external data connections and refreshes the values in relevant cells. |
|
Calculate |
Recalculates the formulas in a specific range or in the entire workbook. Useful when the workbook author has turned off automatic calculation. |
This method has two addressing mechanisms: one takes a cell address ("A22") or a named range ("Cost"), and the other accepts integer coordinates. |
CalculateWorkbook |
Calculates the entire workbook, by using one of two calculation methods: Recalculate: Calculate only formulas that have dependencies that changed. CalculateFull: Calculate all formulas, regardless of dependency changes. |
|
GetCell |
Gets a value out of a cell. Can return formatted string values or raw binary values. |
This method has two addressing mechanisms: one takes a cell address ("A22") or a named range ("Cost"), and the other accepts integer coordinates. |
GetRange |
Gets a set of values out of a contiguous range of cells. |
This method has two addressing mechanisms: one takes a cell address ("A22") or a named range ("Cost"), and the other accepts integer coordinates. |
GetWorkbook |
Gets the entire calculated workbook into memory as a byte array. Can return a live result or a snapshot. |
A snapshot is a workbook that has had its formulas and conditional formatting flattened and external data connections removed. |
CancelRequest |
Aborts a long-running server request. |
|
CloseWorkbook |
Closes the workbook opened for this session, allowing the server to release all associated resources. |
Session Management and Performance
ECS maintains server-side sessions for performance reasons. This prevents having to recalculate the entire workbook each time a user chooses to interact with the workbook (for example, by changing an input parameter). Similarly, if a custom application interacts with a workbook by changing a cell value, only the formulas that depend upon that cell need to be recalculated, instead of the entire workbook. The context is kept in memory on the server as a session. Custom applications need to tell ECS which session they are working with by including the sessionId parameter.
You can configure ECS session settings and performance settings via the Shared Service Provider Excel Services Settings page, and also by using the Stsadm.exe command-line tool. If you are building custom applications, you must consider these settings. By default, the maximum number of sessions per user is 25, although you can configure this value with no limit or as any positive integer. By default, the memory allocated to the ECS process is 50 percent of the physical memory on the machine running ECS, but this value is frequently reconfigured.
Security Configuration
ECS includes a File Access Method configuration setting, which governs how workbooks are retrieved when they are not stored within a SharePoint library. By default, Impersonation is used, meaning that the workbook is opened under the context of the current user credentials. This setting can be changed to Process account, which uses the application pool identity of the SSP to open the workbook.
ECS can also be configured to use Kerberos authentication for access to all workbook storage locations. This is often necessary in complex topologies where delegation is required, or when workbooks access data stored in Microsoft SQL Server Analysis Services.
It is essential that developers consider the intended production security configuration, to ensure that errors do not occur when opening workbooks from custom applications.
Exception Management
ECS raises three categories of exceptions to custom applications:
Errors that prevent ExcelService API methods from completing raise a SOAP exception, which can be caught and handled in the custom application code.
Noncritical errors that do not prevent the return of normal results are returned as output arguments.
Calculation errors are returned just as they are in Excel (for example, #VALUE!).
Quick Start Example
The following example demonstrates how to use the Excel Web Services API to interact with a workbook that performs a simple loan calculation. The workbook is shown in Figure 1, as rendered by Excel Web Access.
Figure 1. Loan calculation workbook in Excel Web Access
In this example, a simple Windows Form application is created to demonstrate the interaction with ECS via the Excel Web Services API. The application performs the following steps when Calculate is clicked:
Creates an instance of the ExcelService object.
Sets the URL to the Web service (within the context of the hosting SharePoint site).
Sets credentials to be used.
Calls the OpenWorkbook method, passing the path to the workbook.
A sessionId is returned.
Calls SetCellA1 to set the three parameter cells to the values that the user typed into the form.
Named ranges are used, instead of direct cell references. This makes the code more robust, and less sensitive to layout changes in the workbook.
Calls GetCellA1 to get the calculation result, the "Payment" named range.
The sample workbook is set to be automatically recalculated; as soon as all of the parameters are set, the result is available. In some cases, automatic recalculation is turned off while authoring the Excel workbook; it is then necessary to call Calculate at the point in the code where we want to tell ECS to explicitly calculate formulas.
Calls CloseWorkbook to end the session.
This call tells ECS that we are finished with this session, and all the associated resources can be released.
To get started, we need a new Windows Form application that includes a Web reference to ExcelService.asmx.
To add a Web reference to ExcelService.asmx
Right-click the project, and then click Add Service Reference.
Click Advanced.
Click Add Web Reference.
Type the URL (for example, http://intranet/reports/_vti_bin/ExcelService.asmx), and then click Go.
Type a Web reference name, and then click Add Reference.
The Windows Form also requires three labels and text boxes for the input values Amount, Interest, and Length. A button to initiate the calculation and a text box to display the result is also needed.
Two using statements are also required in the form's code.
using System.Net;
using ExcelServiceAPISample.intranet;
Add the following code to the Click event handler of the button.
Status[] status;
string sessionId = null;
ExcelService es = new ExcelService();
es.Url = "http://intranet/Reports/_vti_bin/ExcelService.asmx";
es.Credentials = System.Net.CredentialCache.DefaultCredentials;
try {
sessionId = es.OpenWorkbook("http://intranet/Reports/ReportsLibrary/ExcelSample.xlsx",String.Empty, String.Empty, out status);
}
catch {
sessionId = null;
}
if (sessionId == null){
MessageBox.Show("Error opening workbook.");
}
es.SetCellA1(sessionId, "Sheet1", "B3", txtAmount.Text.Trim());
es.SetCellA1(sessionId, "Sheet1", "B4", txtInterest.Text.Trim());
es.SetCellA1(sessionId, "Sheet1", "B5", txtLength.Text.Trim());
object o = es.GetCellA1(sessionId, "Sheet1", "B7", true, out status);
if (o != null){
txtPayment.Text = Convert.ToString(o);
}
else{
txtPayment.Text = "Error getting total value from workbook.";
}
status = es.CloseWorkbook(sessionId);
After the application is built and run and the user enters values, the calculation is performed and the result is returned. There is one caveat with the use of the SetCell method and the GetCell methods: If the author of the workbook changes the location of the cells, the application breaks. A much better approach is to use named ranges within the workbook, which can then be used within the two methods.
es.SetCellA1(sessionId, "", "Amount", txtAmount.Text.Trim());
es.SetCellA1(sessionId, "", "Length", txtLength.Text.Trim());
es.SetCellA1(sessionId, "", "Interest", txtInterest.Text.Trim());
object o = es.GetCellA1(sessionId, "Sheet1", "Payment", true, out
status);
Conclusion
This extremely simple quick start application demonstrates the power of the Excel Web Services API for performing server-side calculations by using Excel Calculation Services (ECS) while securing the calculation logic on the server. By using the Excel Web Services API, you can implement powerful applications that consume the services offered by ECS.
Additional Resources
For more information, see the following resources: