Поделиться через


Известные проблемы и советы по работе со службами Excel

Дата последнего изменения: 7 сентября 2011 г.

Применимо к: SharePoint Server 2010

В этой статье
Веб-служба Excel
Общие сведения о безопасности
Visual Studio
Пользовательские функции служб Excel
Общие рекомендации

В этой статье приводятся известные проблемы служб Excel и советы по работе с ними.

Веб-служба Excel

Просмотр расположения WSDL

Чтобы просмотреть страницу языка WSDL веб-служб Excel, перейдите по следующему URL-адресу на сервере: http://<server>/<customsite>/_vti_bin/excelservice.asmx?WSDL

Если специализированный сайт отсутствует, то можно просмотреть язык WSDL по следующему URL-адресу:

http://<server>/_vti_bin/excelservice.asmx?WSDL

Дополнительные сведения см. в статье Доступ к API-интерфейсу SOAP.

Общие сведения о веб-службах и пространствах имен Excel

Ниже приводятся веб-службы и пространства имен Excel.

Установка локальной связи или связи с веб-службой

В определенных ситуациях бывает необходимо установить связь непосредственно с библиотекой Microsoft.Office.Excel.Server.WebServices.dll и получать к ней доступ как к простой локальной сборке, вместо ее вызова в качестве веб-службы с помощью SOAP по HTTP.

Дополнительные сведения и рекомендации, касающиеся применимости прямого связывания в том или ином случае, см. в статье Вызовы SOAP с замыканием на себя и прямая привязка.

Общие сведения о недопустимых символах

Вызовы методов GetCell и GetRange могут завершиться неудачно, если в ячейках книги содержатся символы, недопустимые в ответе XML.

Например, если в ячейке содержатся символы с шестнадцатеричными значениями (0x1, 0x2 ... 0x8), то средство синтаксического анализа ASP.NET будет вызывать исключение, информирующее, что значение символа, записываемого в ответ XML, недопустимо:

System.InvalidOperationException: Клиент обнаружил тип контента ответа "text/html; charset=utf-8", но ожидается тип "text/xml". Сбой запроса с сообщением об ошибке: -- <html> <head> <title>' ', шестнадцатеричное значение 0x01, является недопустимым знаком.</title>

Это нормальное поведение. Спецификация XML, которая определяет, какие символы разрешены в допустимом ответе XML, указывает, что шестнадцатеричные значения (0x1, 0x2 ... 0x8) являются недопустимыми символами XML:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* все символы Юникода, за исключением суррогатных блоков, FFFE и FFFF. */

Дополнительные сведения см. в документе W3C Extensible Markup Language (XML) Specification (Спецификация языка XML от W3C) (http://www.w3.org/TR/REC-xml\#NT-Char).

Сохранение книги

При внесении изменений в книгу, например при задании значений диапазона с помощью веб-служб Excel, эти изменения сохраняются только для этого конкретного сеанса. Изменения не сохраняются и не вносятся в саму книгу. Если текущий сеанс работы с книгой завершается (например, при вызове метода CloseWorkbook, или по истечении времени ожидания сеанса), внесенные изменения будут потеряны.

Если требуется сохранять изменения в книге, можно использовать метод GetWorkbook, а затем сохранить книгу с помощью API конечного файлового хранилища. Дополнительные сведения см. в статьях Получение рабочей книги целиком или ее снимка и How to: Save a Workbook.

Общие сведения о свойстве Url прокси-класса веб-служб Excel

Не используйте свойство Url прокси веб-служб Excel для расположения книги, которую требуется открыть. Свойство Url прокси-класса веб-службы, созданное Visual Studio, задает или возвращает базовый URL-адрес XML-веб-службы, которую запрашивает клиент. В случае веб-служб Excel это обычно следующий адрес:

http://<server name>/_vti_bin/ExcelService.asmx

Чтобы указать расположение книги, используйте метод OpenWorkbook вместо свойства Url , как показано в следующем примере кода.

//Instantiate the web service and make a status array object.
ExcelService xlservice = new ExcelService();
string sheetName = "Sheet1";         

//Set the path to the workbook to open.
//TODO: Change the path to the workbook
 //to point to a workbook you have access to.
//The workbook must be in a trusted location.
string targetWorkbookPath = 
   "http://myserver02/example/Shared%20Documents/Book1.xlsx";

//Set credentials for requests.
xlservice.Credentials = System.Net.CredentialCache.DefaultCredentials;

//Call the open workbook, and point to the trusted   
//location of the workbook to open.
string sessionId = xlservice.OpenWorkbook(targetWorkbookPath, "en-US", 
    "en-US", out outStatus);
                

Дополнительные сведения см. в описании свойства WebClientProtocol.Url (https://msdn.microsoft.com/en-us/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebServicesProtocolsWebClientProtocolClassUrlTopic.asp).

Общие сведения о безопасности

Использование разрешений книг

Остерегайтесь следующих проблем, связанных с разрешениями книг.

  • Веб-службы Excel используют схему авторизации Microsoft SharePoint Foundation для проверки, имеет ли вызывающая сторона право на удаленный вызов интерфейсов API (т. е. вызова веб-служб) на сайте SharePoint Foundation (т. е. на веб-сайте, на котором расположены веб-службы Excel). Если вызывающая сторона не имеет прав на использование удаленного API, то веб-службы Excel возвращают ошибку "HTTP 401 (не санкционировано)" и записывают в журнал событие "API authorization failed" ("Сбой авторизации API"). Веб-службы Excel выполняют эти проверки только для вызовов, которые создаются как вызовы SOAP. Вызовы от приложений, которые локально связываются с библиотекой Microsoft.Office.Excel.Server.WebServices.dll, не рассматриваются как удаленные. Следовательно, для них не выполняются проверки авторизации. Однако если приложение, локально связывающееся с библиотекой Microsoft.Office.Excel.Server.WebServices.dll, само является службой SOAP и обрабатывает вызовы SOAP службы, то вызов веб-служб Excel будет выглядеть как вызов SOAP (хотя приложение и связывается непосредственно с библиотекой Microsoft.Office.Excel.Server.WebServices.dll). В этом случае веб-службы Excel будут выполнять проверки авторизации.

  • Чтобы получить всю книгу (например, путем вызова метода GetWorkbook с аргументом WorkbookType.FullWorkbook), вызывающей стороне потребуется разрешение на открытие книги или разрешение на чтение в общей папке.

  • Для вызова метода GetApiVersion не требуется никаких разрешений.

  • Для остальных методов веб-служб Excel вызывающей стороне помимо учетных данных требуется разрешение на просмотр (в SharePoint Foundation) или на чтение (в общей папке) книги.

Надежное расположение

Книга, которую требуется открыть в службах Excel, должна находиться в надежном расположении. Если это не так, то вызовы веб-служб Excel для открытия книги будут завершаться с ошибками.

Присвоение доверия расположению рассматривается в статьях Инструкции по определению надежного расположения и How to: Trust Workbook Locations Using Script.

Visual Studio

Поведение прокси Microsoft Visual Studio

Когда Microsoft Visual Studio создает прокси-класс для клиентского проекта, который вызывает веб-службы Excel, этот прокси-класс ведет себя следующим образом:

Если у метода отсутствует возвращаемое значение, и имеется хотя бы один аргумент out, то первый аргумент out перемещается и становится возвращаемым значением. Таким образом, метод в прокси-классе будет иметь в сигнатуре метода на один аргумент out меньше. Но в сигнатуре будет возвращаемое значение с типом и контентом, которые использовались в первом аргументе out.

Такое поведение характерно также для следующих методов веб-служб Excel:

  • Calculate

  • CalculateA1

  • CalculateWorkbook

  • CancelRequest

  • CloseWorkbook

  • GetSessionInformation

  • Refresh

  • SetCell

  • SetCellA1

  • SetRange

  • SetRangeA1

Пользовательские функции служб Excel

Сначала проверяется глобальный кэш сборок, затем локальная папка

В Microsoft .NET Framework сборка в глобальном кэше сборок будет загружаться вместо той же сборки в локальной папке (такое поведение было указано намеренно). Среда CLR сначала будет искать сборку в глобальном кэше сборок, а затем в локальных папках.

Следовательно, если сборка установлена в глобальном кэше сборок и имеется в списке UDF, но отключена (или вообще удалена из списка UDF), и аналогичная сборка установлена в локальной папке и включена, то сборка из глобального кэша сборок будет продолжать загружаться и использоваться вместо такой же сборки из локальной папки.

Это не влияет на процессы обновления, в которых изменяется версия сборки, поскольку при изменении версии сборка считается другой.

Общие рекомендации

Порядок строк в Sharedstring.xml не поддерживается

Службы Excel не поддерживают исходный порядок строк в таблице общих строк книги (в части Sharedstrings.xml файла формата Microsoft Office Excel XML). Например, выполните следующие действия:

  1. Откройте файл с помощью Excel.

  2. Сохраните файл в формате XLSX.

  3. Отправьте файл в библиотеку документов, являющуюся надежным расположением.

  4. Откройте файл в этой библиотеке с помощью Excel Web Access.

  5. Нажмите кнопку Открыть в Excel.

  6. Сохраните файл в формате XLSX.

Если сравнить файл Sharedstrings.xml, созданный на шаге 2, с файлом, созданным на шаге 6, можно обнаружить, что порядок строк в частях Sharedstrings.xml разный.

Не следует создавать приложения, в которых предполагается фиксированный порядок строк в таблице общих строк. Например, нельзя заменять таблицу общих строк существующей локализованной таблицей преобразования. Необходимо приспособиться к новому порядку строк в таблице общих строк.

См. также

Задачи

Инструкции по определению надежного расположения

Концепции

Рекомендации по работе со службами Excel

Excel Services Alerts

Архитектура служб Excel

Поддерживаемые и неподдерживаемые возможности

Доступ к API-интерфейсу SOAP

Блоги, форумы и ресурсы служб Excel