次の方法で共有


Excel Services の既知の問題とヒント

以下は、Excel Services を操作するときの既知の問題とヒントの一覧です。

Excel Web サービス

WSDL の場所

サーバー上の次の URL に移動すると、Excel Web Services Web サービス記述言語 (WSDL) のページを表示できます。http://<server>/<customsite>/_vti_bin/excelservice.asmx?WSDL

ユーザー設定のサイトがない場合は、次の URL を使用して WSDL を表示できます。

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

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

サービスと名前空間

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

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

どのような場合に直接リンクを使用する必要があるかの詳細とガイドラインについては、「ループバック SOAP 呼び出しと直接リンク」を参照してください。

無効な文字

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

たとえば、セルに 16 進数の値 0x1 ~ 0x8 を持つ文字が含まれていると、ASP.NET パーサーは XML 応答に書き込もうとしている文字の値が無効であるという例外をスローします。

System.InvalidOperationException: クライアントは 'text/html; charset=utf-8' の応答のコンテンツ タイプを見つけましたが 'text/xml' が必要です。要求は以下のエラーにより失敗しました。-- <html> <head> <title>' ', 16 進数値 0x01 は無効な文字です。</title>

この動作は予期されています。有効な XML 応答で許可される文字を定義している XML 仕様では、次のように 16 進数の値 0x1 ~ 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 サービスのプロキシ クラスの Url プロパティ

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

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);
                

詳細については、「WWebClientProtocol.Url プロパティ (System.Web.Services.Protocols)」 (https://msdn.microsoft.com/ja-jp/library/system.web.services.protocols.webclientprotocol.url.aspx) を参照してください。

セキュリティ

ブックの権限

  • Excel Web Services は Windows SharePoint Services 3.0 認証スキーマを使用して、呼び出し元がリモートから Windows SharePoint Services 3.0 サイト (つまり、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 への呼び出しは、(アプリケーションが直接 Microsoft.Office.Excel.Server.WebServices.dll にリンクされていても) SOAP 呼び出しのように見えます。このシナリオでは、Excel Web Services が認証確認を実行します。

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

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

  • Excel Web Services の他のメソッドについては、呼び出し元には資格情報以外に、必要なブックについて、Windows SharePoint Services 3.0 での "表示" 権限またはファイル共有での "読み取り" 権限が必要です。

信頼できる場所

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

注意

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

Visual Studio

Microsoft Visual Studio のプロキシの動作

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

メソッドに戻り値がなく、out 引数が 1 つ以上ある場合、最初の out 引数が移動して戻り値になります。つまり、プロキシ クラスのメソッドでは、out 引数の数が、メソッド署名の数より 1 つ少なくなります。しかし署名には、以前は最初の out 引数であった型とコンテンツを持つ戻り値が存在することになります。

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

  • Calculate

  • CalculateA1

  • CalculateWorkbook

  • CancelRequest

  • CloseWorkbook

  • GetSessionInformation

  • Refresh

  • SetCell

  • SetCellA1

  • SetRange

  • SetRangeA1

Excel Services ユーザー定義関数 (UDF)

グローバル アセンブリ キャッシュが最初に確認されてからローカル フォルダが確認される

Microsoft .NET Framework では意図的に、ローカル フォルダ内のアセンブリではなく、グローバル アセンブリ キャッシュ内の同じアセンブリが読み込まれます。共通言語ランタイムは、ローカル フォルダで検索を行う前に、まずグローバル アセンブリ キャッシュ内でアセンブリを探します。

したがって、アセンブリがグローバル アセンブリ キャッシュにインストールされ、UDF リストに含まれているが無効にされている (または UDF リストから完全に削除されている) と、同じアセンブリをローカル フォルダにインストールして有効にした場合でも、ローカル フォルダの同じアセンブリの代わりにグローバル アセンブリ キャッシュ内のアセンブリが読み込まれ、使用されます。

これは、アセンブリのバージョンが変更された場合のような、アップグレードのシナリオには影響しません。バージョンの変更は、アセンブリが同じものではなくなっていることを意味します。

全般

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

Excel Services では、ブックの共有ストリング テーブルで文字列の元の順序が維持されません (Microsoft Office Excel XML Format ファイル内の sharedstrings.xml の部分)。たとえば、以下の手順を実行してください。

  1. Microsoft Office Excel 2007 でファイルを開きます。

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

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

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

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

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

手順 2. で作成した sharedstrings.xml ファイルと、手順 6. で作成したファイルを比較すると、sharedstrings.xml の各部分の順序が異なっていることがわかります。

共有ストリング テーブル内の文字列の順序が固定されていることを前提にしたアプリケーションは記述しないようにします。たとえば、共有ストリング テーブルを、既存のローカライズ済みの変換テーブルに置き換えることはできません。共有ストリング テーブル内の文字列の新しい順序に合わせる必要があります。

See Also

タスク

[方法] 場所を信頼する

[方法] スクリプトを使用してブックの場所を信頼する

概念

Excel Services ベスト プラクティス

Excel Services の通知

Excel サービスのアーキテクチャ

Excel Services でサポートされない機能

SOAP API にアクセスする

Excel Services のブログ