Excel Services の既知の問題とヒントExcel Services Known Issues and Tips

以下は、Excel Services を操作する際の既知の問題およびヒントです。The following are a known issues and tips for working with Excel Services.

Excel Web ServicesExcel Web Service

WSDL の場所の表示Viewing the WSDL Location

Excel Web Services の Web サービス記述言語 (WSDL) ページは、サーバー上で URL http://<server>/<customsite>/_vti_bin/excelservice.asmx?WSDL に移動すると表示できます。You can view the Excel Web Services Web Services Description Language (WSDL) page by navigating to the following URL on the server: http://<server>/<customsite>/_vti_bin/excelservice.asmx?WSDL

カスタム サイトがない場合、次の URL を使用すると WSDL を表示できます。:If you do not have a custom site, you can view the WSDL by using the following URL:

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

詳細は、「 SOAP API にアクセスする」を参照してください。For more information, see Accessing the SOAP API.

Excel Web Services および名前空間の理解Understanding Excel Web Services and Namespaces

Excel Web Services と名前空間を次に示します。The following are Excel web services and namespaces:

  • すべての API メソッドを含む 1 つの Web サービス オブジェクト: ExcelServiceThe single web service object that contains all the API methods: ExcelService

  • スキーマの名前空間: http://schemas.microsoft.com/office/excel/server/webservicesThe schema namespace: http://schemas.microsoft.com/office/excel/server/webservices

  • Web サービス ページの名前: ExcelService.asmxThe web service page name: ExcelService.asmx

ローカルまたは Web サービスへのリンクLinking Locally or to a Web Service

特定のシナリオでは、SOAP over HTTP を介して Web サービスとして呼び出すのではなく、直接 Microsoft.Office.Excel.Server.WebServices.dll にリンクして、ローカル アセンブリのようにアクセスする必要があります。In certain scenarios, you should link directly to Microsoft.Office.Excel.Server.WebServices.dll and access it as you would any local assembly, instead of calling it as a web service through SOAP over HTTP.

直接リンクを使用する場合について、詳細およびガイドラインは「 SOAP 呼び出しのループバックおよび直接リンク」を参照してください。For more information and guidelines on when to use direct linking, see Loop-Back SOAP Calls and Direct Linking.

無効な文字の理解Understanding Invalid Characters

XML 応答で無効の文字がブックのセルに含まれていると、 GetCell メソッドと GetRange メソッドの呼び出しは失敗します。The calls to the GetCell and GetRange methods will fail if the workbook cells contain characters that are invalid in an XML response.

たとえば、セルに 16 進値 0x1、0x2 ... 0x8 を持つ文字が含まれる場合、ASP.NET パーサーは、XML 応答に書き込まれる文字の値が無効であるという例外をスローします。For example, if a cell contains characters with hexadecimal values 0x1, 0x2 ... 0x8, the ASP.NET parser will throw an exception that the value of the character being written to the XML response is invalid:

System.InvalidOperationException: クライアントは 'text/html; charset=utf-8' の応答のコンテンツ タイプを見つけましが、'text/html' が必要です。要求が失敗しました。エラー メッセージ: ' ' (16 進数値 0x01) は無効な文字です。System.InvalidOperationException: Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'. The request failed with the error message: -- ' ', hexadecimal value 0x01, is an invalid character.

この動作は想定されています。XML の仕様の定義では、有効な XML 応答で許可される文字について、16 進数の値 0x1、0x2 ... 0x8 は無効な XML 文字であると規定されています。This behavior is expected. The XML specification that defines which characters are allowed in a valid XML response specifies that hexadecimal values 0x1, 0x2 ... 0x8 are invalid XML characters:

*Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] / any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */*Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] / any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

詳細は、「W3C 拡張マークアップ言語 (XML) の仕様」(http://www.w3.org/TR/REC-xml#NT-Char)) を参照してください。For more information, see W3C Extensible Markup Language (XML) Specification (http://www.w3.org/TR/REC-xml#NT-Char).

ブックの保存Saving a Workbook

たとえば、Excel Web Services を使用して範囲に値を設定するなどしてブックに対して変更を行う場合、ブックに対する変更は、その特定のセッションにのみ保持されます。変更は保存されたり、元のブックに保存されることはありません。現在のブックのセッションが終了 (例えば、 CloseWorkbook メソッドを呼び出したり、セッションがタイムアウトしたりして) すると、行われた変更は失われます。When you make changes to a workbook—for example, by setting values to a range using Excel Web Services—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.

ブックへの変更を保存する場合は、 GetWorkbook メソッドを使用してから、保存先のファイル ストアの API を使用してブックを保存します。詳細は、「 方法: ブック全体またはスナップショットの取得」および「 [方法] ブックを保存する」を参照してください。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.

Excel Web Services プロキシ クラスの Url プロパティの理解Understanding the Url Property of an Excel Web Services Proxy Class

開こうとするブックの場所のために Excel Web Services プロキシの Url プロパティを使用しないでください。Visual Studio が生成する Web サービス プロキシ クラスの Url プロパティには、クライアントが要求する XML Web サービスのベース URL を取得または設定します。Excel Web Services の場合、通常は次のようになります。Do not use the Url property of an Excel Web Services 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. In the case of Excel Web Services, this is usually:

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

ブックの場所を指定するには、次のコード例に示すとおり、 Url プロパティではなく OpenWorkbook メソッドを使用します。To specify the location of a workbook, use the OpenWorkbook method instead of the Url property as shown in the following code example.


//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 プロパティ」(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebServicesProtocolsWebClientProtocolClassUrlTopic.asp)) を参照してください。For more information, see WebClientProtocol.Url Property (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebServicesProtocolsWebClientProtocolClassUrlTopic.asp).

セキュリティの理解Understanding Security

ブックのアクセス許可の使用Using Workbook Permissions

ブックのアクセス許可については、次の点に注意してください。Beware of the following issues regarding workbook permissions:

  • Excel Web Services は、Microsoft SharePoint Foundation 承認スキームを使用して、SharePoint Foundation サイト (つまり、Excel Web Services が配置されている Web サイト) においてリモートで API を呼び出す (つまり、Web サービスを呼び出す) 権利が呼び出し元にあるかどうかを確認します。呼び出し元に「リモートで API を使用する」権利がない場合、Excel Web Services は「HTTP 401 (権限がない)」エラーを返し、ログにイベント「API authorization failed」を記録します。Excel Web Services は、SOAP の呼び出しとして発信された呼び出しにのみ承認チェックを実行します。Microsoft.Office.Excel.Server.WebServices.dll にローカルにリンクしているアプリケーションからの呼び出しはリモート呼び出しとは見なされません。したがって、これらの呼び出しには承認チェックを行いません。ただし、Microsoft.Office.Excel.Server.WebServices.dll にローカルでリンクするアプリケーション自体が SOAP サービスで、サービスの SOAP 呼び出しを処理する場合、(Microsoft.Office.Excel.Server.WebServices.dll にアプリケーションが直接リンクしているにもかかわらず) Excel Web Services への呼び出しは SOAP の呼び出しとみなされます。このシナリオでは、Excel Web Services は承認チェックを行います。Excel Web Services uses the Microsoft SharePoint Foundation authorization scheme to verify that the caller has the right to call APIs (that is, make web service calls) on the SharePoint Foundation site (that is, the website where Excel Web Services is located) remotely. If the caller does not have the "Use Remote API" right, the Excel Web Services returns an "HTTP 401 (Unauthorized)" error, and logs an "API authorization failed" event. Excel Web Services 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 Web Services will seem like a SOAP call (even though the application links directly to Microsoft.Office.Excel.Server.WebServices.dll). In this scenario, Excel Web Services will perform the authorization checks.

  • ブック全体を取得 (たとえば、引数 WorkbookType.FullWorkbook を使用して GetWorkbook メソッドを呼び出すことにより) するには、ブックに対する「開く」許可またはファイル共有の「読み取り」許可が呼び出し元に必要です。To get the entire workbook (for example, by calling the GetWorkbook method using the WorkbookType.FullWorkbook argument), the caller needs "open" permission for the workbook or "read" permission in a file share.

  • GetApiVersion メソッドの呼び出しには、許可は不要です。To call the GetApiVersion method, no permission is necessary.

  • 残りの Excel Web Services メソッドについては、資格情報に加えて、呼び出し元にはブックに対する「表示」許可 (SharePoint Foundation 内) または「読み取り」許可 (ファイル共有内) が必要です。For the rest of the Excel Web Services methods, besides credentials, the caller needs "view" permission (in SharePoint Foundation) or "read" permission (in a file share) for the workbook.

信頼できる場所Trusted Location

Excel Services で開くブックは、信頼できる場所に配置する必要があります。信頼できる場所に配置されていない場合、ブックを開く Excel Web Services の呼び出しは失敗します。The workbooks you want to open in Excel Services must be placed in a trusted location. If not, the Excel Web Services calls to open the workbook will fail.

場所の信頼方法について、詳細は「 方法: 場所を信頼する」および「 [方法] スクリプトを使用してブックの場所を信頼する」を参照してください。For information about how to trust a location, see How to: Trust a Location and How to: Trust Workbook Locations Using Script.

Visual StudioVisual Studio

Microsoft Visual Studio のプロキシの動作Microsoft Visual Studio Proxy Behavior

Microsoft Visual Studio は、Excel Web Services を呼び出すクライアント プロジェクトのプロキシ クラスを作成する場合、次のように動作します。When Microsoft Visual Studio creates a proxy class for a client project that calls Excel Web Services, it has the following behavior:

メソッドに戻り値がなく、1 つ以上の out 引数がある場合、最初の out 引数は移動して戻り値になります。つまり、プロキシ クラスのメソッドでは、メソッド シグネチャの引数 out が 1 つ少なくなります。しかし、シグネチャには、最初の out 引数だったものと型と内容が同じの戻り値が含まれます。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 Web Services メソッドは次のとおりです。The affected Excel Web Services methods are:

  • CalculateCalculate

  • CalculateA1CalculateA1

  • CalculateWorkbookCalculateWorkbook

  • CancelRequestCancelRequest

  • CloseWorkbookCloseWorkbook

  • GetSessionInformationGetSessionInformation

  • RefreshRefresh

  • SetCellSetCell

  • SetCellA1SetCellA1

  • SetRangeSetRange

  • SetRangeA1SetRangeA1

Excel Services のユーザー定義関数Excel Services User-Defined Functions

グローバル アセンブリ キャッシュが最初にチェックされ、その後ローカル フォルダーがチェックされるGlobal Assembly Cache is Checked First, Then the Local Folder

Microsoft .NET Framework の設計上、グローバル アセンブリ キャッシュ内のアセンブリは、ローカル フォルダー内の同じアセンブリの代わりに読み込まれます。共通言語ランタイムは、ローカル フォルダーを検索するより前に、グローバル アセンブリ キャッシュでアセンブリを探します。By design in the Microsoft .NET Framework, an assembly in a global assembly cache will be loaded instead of the same assembly in a local folder. The common language runtime will look for an assembly in the global assembly cache first before searching in the local folders.

このため、アセンブリがグローバル アセンブリ キャッシュにインストールされていて、UDF リストにあるが無効になっている (または UDF リストから削除されている) 場合、かつ同一のアセンブリがローカル フォルダーにインストールされていて有効になっている場合、ローカル フォルダー内のアセンブリではなくグローバル アセンブリ キャッシュ内のアセンブリが読み込まれて使用されます。Therefore, if an assembly is installed in the global assembly cache and is in the UDF list but disabled (or removed from the UDF list altogether), and an identical assembly is installed in a local folder and enabled, the assembly in the global assembly cache will still get loaded and used instead of the same assembly in the local folder.

これは、アセンブリのバージョンが変更されるアップグレード シナリオには影響を与えません。つまり、アセンブリは同一ではないということです。This does not affect upgrade scenarios in which the assembly version has been modified, which means the assembly is not the same anymore.

全般General

Sharedstring.xml 内の文字列の順序は維持されないOrder of Strings in Sharedstring.xml is Not Maintained

Excel Services は、ブックの共有文字列テーブル (Microsoft Office Excel XML 形式 ファイル内の Sharedstrings.xml 部分) の元の文字列の順序を維持しません。たとえば、次の手順を実行する場合を考えます。Excel Services does not maintain the original order of strings in a workbook shared-string table (the Sharedstrings.xml part within the Microsoft Office Excel XML Format file). For example, execute the following steps:

  1. Excel でファイルを開きます。Open a file using Excel.

  2. ファイルを .xlsx ファイル形式で保存します。Save the file in .xlsx file format.

  3. ファイルを、信頼できる場所であるドキュメント ライブラリにアップロードします。Upload the file to a document library that is a trusted location.

  4. Excel Web Access でドキュメント ライブラリ内のファイルを開きます。Open the file in the document library by using Excel Web Access.

  5. [ Excel で開く] をクリックします。Click Open in Excel.

  6. ファイルを .xlsx ファイル形式で保存します。Save the file in .xlsx file format.

手順 2 で作成した Sharedstrings.xml ファイルを 手順 6 で作成したものと比較すると、Sharedstrings.xml 部分の順序が異なる場合があることが分かります。If you compare the Sharedstrings.xml file created in Step 2 with the one created in Step 6, you will find the order of the Sharedstrings.xml parts might be different.

共有文字列テーブルの順序が固定であることが前提のアプリケーションは記述しないほうがよいでしょう。たとえば、共有文字列テーブルを既存のローカライズされた翻訳テーブルに置き換えることはできません。共有文字列テーブルの新しい順序に合わせて調整する必要があります。You should not write an application that assumes the order of strings in the shared-string table is fixed. For example, you cannot replace the shared-string table with an existing localized translation table. You must adjust to the new ordering of strings in the shared-string table.

関連項目See also

タスクTasks

方法: 場所を信頼するHow to: Trust a Location

概念Concepts

Excel Services のベスト プラクティスExcel Services Best Practices

Excel Services のアラートExcel Services Alerts

Excel Services のアーキテクチャExcel Services Architecture

サポートされる機能とサポートされない機能Supported and Unsupported Features

SOAP API にアクセスするAccessing the SOAP API

Excel Services ブログ、フォーラム、リソースExcel Services Blogs, Forums, and Resources