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

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

Excel Web Service

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

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

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

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

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

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

  • Один объект веб-службы, содержащий все методы API: ExcelService
  • Пространство имен схемы: http://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, является недопустимым символом.

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

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

Дополнительные сведения см. в статье Спецификация языка РАСШИРЯЕМЫХ разметки (XML) W3C.

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

[!Примечание] When you make changes to a workbook—for example, by setting values to a range using Веб-службы Excel—the changes to the workbook are preserved only for that particular session. The changes are not saved or persisted back to the original workbook. When the current workbook session ends (for example, when you call the CloseWorkbook method, or the session times out), changes you made will be lost.

If you want to save changes to a workbook, you can use the GetWorkbook method and then save the workbook using the API of the destination file store. For more information, see How to: Get an Entire Workbook or a Snapshot and How to: Save a Workbook.

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

Do not use the Url property of an Веб-службы Excel proxy for the location of the workbook you want to open. The Url property of a web service proxy class generated by Visual Studio gets or sets the base URL of the XML web service the client is requesting. В случае с веб-службами 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.

О безопасности

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

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

  • Веб-службы Excel используют схему авторизации Microsoft SharePoint Foundation, чтобы убедиться, что вызывающий объект имеет право вызывать API (т. е. совершать вызовы веб-служб) на сайте SharePoint Foundation (то есть веб-сайте, где находятся веб-службы Excel) удаленно. If the caller does not have the "Use Remote API" right, the Веб-службы Excel returns an "HTTP 401 (Unauthorized)" error, and logs an "API authorization failed" event. Веб-службы Excel performs these authorization checks only for calls that originate as SOAP calls. Calls from applications that link locally to Microsoft.Office.Excel.Server.WebServices.dll are not considered remote calls. Therefore, they are not subject to authorization checks. However, if the application that links locally to Microsoft.Office.Excel.Server.WebServices.dll is itself a SOAP service, and handles the service's SOAP calls, the call to Веб-службы Excel will seem like a SOAP call (even though the application links directly to Microsoft.Office.Excel.Server.WebServices.dll). In this scenario, Веб-службы Excel will perform the authorization checks.
  • Чтобы получить всю книгу (например, путем вызова метода GetWorkbook, используя аргумент WorkbookType.FullWorkbook), вызывающей стороне потребуется разрешение на открытие книги или разрешение на чтение общей папки.
  • Для вызова метода GetApiVersion разрешения не нужны.
  • Для остальных методов веб-служб Excel вызывающей стороне, помимо учетных данных, требуется разрешение на просмотр (в SharePoint Foundation) или на чтение (в общей папке) книги.

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

The workbooks you want to open in Службы Excel must be placed in a trusted location. If not, the Веб-службы Excel calls to open the workbook will fail.

Сведения о том, как доверять расположению, см. в разделах How to: Trust a Location и How to: Trust Workbook Locations Using Script.

Visual Studio

Microsoft Visual Studio Proxy Behavior

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

If a method has no return value, and one or more out arguments, the first out argument is moved to become the return value. That is, the method in the proxy class will have one less out argument in the method signature. But the signature will have a return value with the type and content of what used to be the first out argument.

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

  • Calculate
  • CalculateA1
  • CalculateWorkbook
  • CancelRequest
  • CloseWorkbook
  • GetSessionInformation
  • Refresh
  • SetCell
  • SetCellA1
  • SetRange
  • SetRangeA1

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

В первую очередь проверяется глобальный кэш сборок, затем — локальная папка

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

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

Это никак не влияет на сценарии обновления, в которых изменяется версия сборки.

Общие

Порядок строк в файле Sharedstring.xml не сохраняется

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

  1. Откройте файл с помощью Excel.
  2. Сохраните файл в формате XLSX.
  3. Отправьте файл в библиотеку документов, которая является надежным расположением.
  4. Откройте файл в библиотеке документов, используя Excel Web Access.
  5. Нажмите Открыть в Excel.
  6. Сохраните файл в формате XLSX.

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

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

См. также

Задачи

Понятия