Известные проблемы и советы по работе со службами 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.
Один объект веб-службы, содержащий все методы API: ExcelService
Пространство имен схемы: https://schemas.microsoft.com/office/excel/server/webservices
Имя страницы веб-службы: ExcelService.asmx
Установка локальной связи или связи с веб-службой
В определенных ситуациях бывает необходимо установить связь непосредственно с библиотекой 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). Например, выполните следующие действия:
Откройте файл с помощью Excel.
Сохраните файл в формате XLSX.
Отправьте файл в библиотеку документов, являющуюся надежным расположением.
Откройте файл в этой библиотеке с помощью Excel Web Access.
Нажмите кнопку Открыть в Excel.
Сохраните файл в формате XLSX.
Если сравнить файл Sharedstrings.xml, созданный на шаге 2, с файлом, созданным на шаге 6, можно обнаружить, что порядок строк в частях Sharedstrings.xml разный.
Не следует создавать приложения, в которых предполагается фиксированный порядок строк в таблице общих строк. Например, нельзя заменять таблицу общих строк существующей локализованной таблицей преобразования. Необходимо приспособиться к новому порядку строк в таблице общих строк.
См. также
Задачи
Инструкции по определению надежного расположения
Концепции
Рекомендации по работе со службами Excel