在 SharePoint Server 2010 中使用 Excel Services REST API 访问 Excel 数据

SharePoint 可视操作方法

**摘要:**了解如何使用 Excel Services REST API 访问 Microsoft SharePoint Server 2010 上的 Microsoft Excel 工作簿数据。

上次修改时间: 2012年9月12日

适用范围: Excel Services | Office 2010 | SharePoint Foundation 2010 | SharePoint Server 2010 | Visual Studio | Visual Studio 2008 | Visual Studio 2010

**供稿人:**Steve Hansen,Grid Logic (Visual Studio MVP)

概述

Excel Services REST API 是 Excel Services 的一项新功能,可利用此功能使用统一资源定位器 (URL) 地址来访问 Microsoft Excel 工作簿数据。通过使用 REST API,您可以从存储在 SharePoint Server 2010 上的工作簿中检索资源(例如,范围、图表、表和数据透视表)。

REST API 提供了使用 Excel 数据的灵活方式。除了使用 REST API 直接链接到 Excel 资源之外,您还可以以编程方式进行基本 HTTP 调用以在外部程序中使用 Excel 数据。

编码

本节中的代码演示如何使用简单的控制台应用程序示例来使用 Excel Services REST API。

在 REST API 中,代码是可移植的。没有要分发的程序集,您的项目中不需要任何其他引用,并且您无需了解其他对象模型。只要您了解用于访问资源的 URL 约定,您就只需生成 URL,然后使用标准 HttpWebRequest(该链接可能指向英文页面) 对象调用它。

下面的代码示例源于一个简单控制台应用程序。该示例演示一个基本模式,用于通过使用 REST API 检索 SharePoint Server 2010 上的 Excel 工作簿中的资源。该代码示例将从存储在名为"Shared Documents"的文档库中的名为"Invoice.xlsx"的工作簿中检索一个名为"CustomerName"的范围。

using System.Net;
using System.Xml;
using System.IO;
 
static void Main(string[] args)
{
    string rangeName = "CustomerName";
    string value = GetRangeValue("Invoice.xlsx", rangeName);

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(value);
    
    XmlNamespaceManager nsmgr = 
            new XmlNamespaceManager(doc.NameTable);
        
    nsmgr.AddNamespace("x", 
     "https://schemas.microsoft.com/office/2008/07/excelservices/rest");
        
    value = doc.SelectSingleNode("//x:fv", nsmgr).InnerXml;

    Console.WriteLine("The value of {0} is {1}.", rangeName, value);
    Console.WriteLine("Press ENTER to quit.");
    Console.ReadLine();
}

static string GetRangeValue(string workbookName, string rangeName)
{
    string url =
     "http://<server>/_vti_bin/ExcelRest.aspx/Shared%20Documents/" +
      workbookName + "/model/Ranges('" + rangeName + "')?$format=atom";

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.ContentLength = 0;
    request.ContentType = "text/xml";
    request.Credentials =
         System.Net.CredentialCache.DefaultCredentials;

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        var responseValue = string.Empty;

        if (response.StatusCode != HttpStatusCode.OK)
        {
            string message = String.Format(
                "GET failed. Received HTTP {0}", response.StatusCode);

            throw new ApplicationException(message);
        }

        // Return the response.
        using (var responseStream = response.GetResponseStream())
        {
            using (var reader = new StreamReader(responseStream))
            {
                responseValue = reader.ReadToEnd();
            }
        }
        return responseValue;
    }
}

请注意,GetRangeValue() 函数包含一个用于生成资源的 URL 的半硬编码字符串。若要使用此代码,请将 <server> 占位符替换为 SharePoint 环境的地址。

读取

本节演示如何正确构造 REST URL 以从 Excel Services 中的资源中获取信息。

使用 REST API 的关键在于了解如何构造资源的正确 URL。Excel Services 中的 REST URL 包含三个必需部分和一个可选部分。

第一个部分是 ExcelRest.aspx 页的位置。ExcelRest.aspx 是 Excel Services REST API 的入口点。第二个部分是与 ExcelRest.aspx 页相对的工作簿位置。第三个部分是工作簿内请求的资源的路径。例如,如果 SharePoint Server 的 URL 为 http://intranet.contoso.com,并且您希望从存储在 Shared Documents 中的名为"Invoice.xlsx"的工作簿中检索一个名为"CustomerName"的范围,则此 URL 应如下所示。

http://intranet.contoso.com/_vti_bin/ExcelRest.aspx/Shared%20Documents/Invoice.xlsx/model/Ranges('CustomerName')

URL 的可选部分是一个格式参数。EST API 可通过两种方式之一来发送范围值。默认情况下,REST API 会将范围信息作为 HTML 代码返回,如图 1 所示。

图 1. Internet Explorer 窗口中的 HTML 片段

在 Internet Explorer 中查看 HTML 源代码

如果您不指定格式参数,则它将为您请求范围资源时返回的格式。建议您明确请求格式以避免混淆。若要指定格式,请将 ?$format=html 追加到 URL 的末尾。例如,前面的 CustomerName 示例如下所示。

http://intranet.contoso.com/_vti_bin/ExcelRest.aspx/Shared%20Documents/Invoice.xlsx/model/Ranges('CustomerName')?$format=html

REST API 还可以 Atom 联合格式返回范围信息。如图 2 所示,Internet Explorer 并不会直接访问此格式。但是,如果您在 Internet Explorer 中右键单击,然后单击"查看源文件",则可查看返回的数据。

图 2. Internet Explorer 窗口中的 XML 片段

记事本中的 XML 源代码

虽然无法在 Internet Explorer 等应用程序中立即使用 Atom 格式,但由于该格式是数据的 XML 表示形式,因此它更适用于编程使用和操作。若要以 Atom 格式请求范围资源,请将 append ?$format=atom 追加到 URL 的末尾。例如,若要以 Atom 格式检索 CustomerName 示例,请使用下面的代码。

http://intranet.contoso.com/_vti_bin/ExcelRest.aspx/Shared%20Documents/Invoice.xlsx/model/Ranges('CustomerName')?$format=atom

如果您无法确定有哪些给定格式的可用资源,则 REST API 将包含一个发现机制。若要查看这一点,您可使用一个名为模型页的特殊页。例如,若要查看 Invoice 工作簿的模型页,则 URL 如下所示。

http://intranet.contoso.com/_vti_bin/ExcelRest.aspx/Shared%20Documents/Invoice.xlsx/model/

图 3. Internet Explorer 中的模型页

在 Internet Explorer 中添加 RSS 源

然后,如果您单击"范围",则模型将显示工作簿中范围名称的列表。

图 4. Internet Explorer 中的模型页中的范围名称列表

在 Internet Explorer 中订阅 RSS 源。

您可通过单击查看范围来检测其值。但是,模型视图会在您到达无法在 Internet Explorer 中直接显示的范围级别时指定一个 Atom 格式。当您找到要在其他位置嵌入或使用的资源时,请复制 Internet Explorer 的地址栏中的 URL,然后将此 URL 粘贴到所需位置。

观看

观看视频

观看视频(该链接可能指向英文页面) (00:09:03)

浏览

关于作者

Steve Hansen(该链接可能指向英文页面) 就职于 Grid Logic,他是 Microsoft Office 的 MVP 参与者。Steve 是 Grid Logic 的 Office System 架构师,他已经为 Microsoft 制作了许多(50 个以上)有关 Office 开发的视频。

Steve 撰写了多篇与 Office 开发相关的白皮书,并编著了两本书 - Mastering Excel 2000 Premium Edition(《Excel 2000 从入门到精通》)和 Mastering Excel 2003 Programming with VBA(《Excel 2003 与 VBA 编程从入门到精通》),这两本书由 Sybex 出版。