次の方法で共有


Excel Services に関する既知の問題とヒント

最終更新日: 2011年9月7日

適用対象: SharePoint Server 2010

この記事の内容
Excel Web サービス
セキュリティについて
Visual Studio
Excel Services ユーザー定義関数
全般

Excel Services の操作に関する既知の問題およびヒントを次に示します。

Excel Web サービス

WSDL の場所の表示

Excel Web Services WSDL (Web サービス記述言語) ページを表示するには、サーバー上の次の URL にアクセスします: http://<server>/<customsite>/_vti_bin/excelservice.asmx?WSDL

カスタム サイトがない場合は、以下の URL を使用して WSDL を表示できます。

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

詳細については、「SOAP API にアクセスする」を参照してください。

Excel Web Services と名前空間について

Excel Web Services と名前空間を次に示します。

ローカルまたは Web サービスにリンク

あるシナリオでは、SOAP over HTTP を介して Web サービスとして Microsoft.Office.Excel.Server.WebServices.dll を呼び出すのではなく、この DLL に直接リンクして、ローカル アセンブリのようにアクセスする必要があります。

直接リンクを使用するタイミングに関するガイドラインの詳細については、「ループバック SOAP 呼び出しと直接リンク」を参照してください。

無効な文字について

GetCell および GetRange メソッドへの呼び出しは、XML 応答で無効な文字がブックのセルに含まれていると失敗します。

たとえば、セルに 0x1、0x2 ... 0x8 などの 16 進数値が含まれる場合、XML 応答に書き込まれている文字の値が無効であるという例外が ASP.NET パーサーによってスローされます。

System.InvalidOperationException: クライアントが 'text/html; charset=utf-8' の応答のコンテンツ タイプを見つけました。'text/xml' を使用してください。要求が失敗しました。エラー メッセージ: -- <html> <head> <title>' '(16 進数値 0x01) は無効な文字です。</title>

この動作は予測できます。有効な XML 応答で許可されている文字を定義する XML 仕様では、16 進数値 0x1、0x2 ... 0x8 が無効な XML 文字であることが指定されています。

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

詳細については、「W3C Extensible Markup Language (XML) Specification」(http://www.w3.org/TR/REC-xml\#NT-Char) を参照してください。

ブックの保存

Excel Web Services を使用して範囲に値を設定するなどの変更をブックに加えた場合、ブックに対する変更が保持されるのは、その特定のセッションの間だけです。変更内容が元のブックに保存されることはありません。現在のブックのセッションが終了すると (たとえば CloseWorkbook メソッドを呼び出したり、セッションがタイムアウトした場合)、加えた変更は失われます。

ブックに対して加えた変更を保存する必要がある場合は、GetWorkbook メソッドを使用し、次に保存先ファイル ストアの API を使用するとブックを保存できます。詳細については、「[方法] ブック全体またはスナップショットを取得する」と「[方法] ブックを保存する」を参照してください。

Excel Web Services プロキシ クラスの Url プロパティについて

開く必要があるブックの場所に対して Excel Web Services プロキシの Url プロパティを使用しないでください。Visual Studio で生成された Web サービス プロキシの Url プロパティは、クライアントが要求している XML Web サービスのベース URL を取得または設定します。Excel Web Services の場合は、通常、次の URL です。

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

ブックの場所を指定するには、次のコード例で示すように、Url プロパティではなく OpenWorkbook メソッドを使用します。

//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 Web Services では、Microsoft SharePoint Foundation 承認スキームを使用して、SharePoint Foundation サイト (つまり、Excel Web Services がある Web サイト) で API をリモートで呼び出す (つまり、Web サービス呼び出す) 権利が呼び出し側にあることを確認します。呼び出し側に "リモート API を使用する" 権利がない場合、Excel Web Services は "HTTP 401 (権限なし)" エラーを返し、"API に失敗" イベントをログに記録します。Excel Web Services は、SOAP 呼び出しとして発信された呼び出しに対してのみ認証チェックを行います。Microsoft.Office.Excel.Server.WebServices.dll にローカルでリンクしているアプリケーションからの呼び出しは、リモート呼び出しとはみなされません。したがって、認証チェックの対象とはなりません。ただし、Microsoft.Office.Excel.Server.WebServices.dll にローカルでリンクしているアプリケーション自体が SOAP サービスで、そのサービスの SOAP 呼び出しを処理する場合、Excel Web Services への呼び出しは、SOAP 呼び出しのようになります (アプリケーションが Microsoft.Office.Excel.Server.WebServices.dll に直接リンクしている場合でも)。このシナリオでは、Excel Web Services は、認証チェックを実行します。

  • ブック全体を取得するには (たとえば、WorkbookType.FullWorkbook 引数を使用して GetWorkbook メソッドを呼び出す場合など)、呼び出し側にはブックを "開く" 権限またはファイル共有での "読み取り" 権限が必要です。

  • GetApiVersion メソッドを呼び出す場合は、権限は必要ありません。

  • その他の Excel Web Services のメソッドでは、資格情報を除き、呼び出し側にブックの "表示" 権限 (SharePoint Foundation) または "読み取り" 権限 (ファイル共有) が必要です。

信頼できる場所

Excel Services で開くブックは、信頼できる場所にある必要があります。信頼できる場所にブックがない場合、ブックを開く Excel Web Services 呼び出しは失敗します。

場所を信頼する方法については、「[方法] 場所を信頼する」および「[方法] スクリプトを使用してブックの場所を信頼する」を参照してください。

Visual Studio

Microsoft Visual Studio プロキシの動作

Excel Web Services を呼び出すクライアント プロジェクトのプロキシ クラスを Microsoft Visual Studio が作成するときの動作を次に示します。

メソッドに戻り値がなく、1 つ以上の out 引数が指定されている場合、最初の out 引数が戻り値になるために移動します。つまり、プロキシ クラスのメソッドでは、1 つ少ない out 引数がメソッド シグネチャに含まれることになります。ただし、シグネチャの戻り値には、最初の out 引数の型とコンテンツが指定されます。

影響を受ける Excel Web Services メソッドは次のとおりです。

  • Calculate

  • CalculateA1

  • CalculateWorkbook

  • CancelRequest

  • CloseWorkbook

  • GetSessionInformation

  • Refresh

  • SetCell

  • SetCellA1

  • SetRange

  • SetRangeA1

Excel Services ユーザー定義関数

グローバル アセンブリ キャッシュ、ローカル フォルダーの順にチェック

Microsoft .NET フレームワークのデザインにより、ローカル フォルダーのアセンブリではなく、グローバル アセンブリ キャッシュの同じアセンブリが読み込まれます。共通言語ランタイムは、グローバル アセンブリ キャッシュを最初に検索してからローカル フォルダー内を検索します。

したがって、アセンブリがグローバル アセンブリ キャッシュにインストールされ、UDF リストに含まれるが無効になっている場合 (または UDF リストからすべて削除されている場合)、および同じアセンブリがローカル フォルダーにインストールされ有効になっている場合でも、ローカル フォルダーのアセンブリではなく、グローバル アセンブリ キャッシュのアセンブリが引き続き読み込まれ使用されます。

これはアセンブリ バージョンが変更されたアップグレードのシナリオには影響しません。つまり、アセンブリは同じではありません。

全般

Sharedstring.xml の文字列の順序が維持されない

Excel Services では、ブック共有文字列テーブル (Microsoft Office Excel XML Format ファイルの Sharedstrings.xml 部分) の文字列の元の順序が維持されません。たとえば、次の手順を実行します。

  1. Excel を使用してファイルを開きます。

  2. .xlsx ファイル形式でファイルを保存します。

  3. 信頼できる場所であるドキュメント ライブラリにファイルをアップロードします。

  4. Excel Web Access を使用して、ドキュメント ライブラリのファイルを開きます。

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

  6. .xlsx ファイル形式でファイルを保存します。

手順 2. で作成した Sharedstrings.xml ファイルと手順 6. で作成したファイルを比較すると、Sharedstrings.xml 部分の順序が違うことがわかります。

共有文字列テーブルの文字列の順序が固定されていることを想定したアプリケーションは記述しないでください。たとえば、共有文字列テーブルと、既存のローカライズされた翻訳テーブルを置き換えることはできません。共有文字列テーブルで文字列を新しい順序に調整する必要があります。

関連項目

タスク

[方法] 場所を信頼する

概念

Excel Services ベスト プラクティス

Excel Services の警告

Excel Services のアーキテクチャ

サポートされる機能とサポートされていない機能

SOAP API にアクセスする

Excel Services のブログ、フォーラム、およびリソース