さまざまな地域設定を使用した Excel のデータの書式設定

日付や通貨など、ロケールに依存する書式設定を持つすべてのデータは、Microsoft Office Excel に渡したり、Office プロジェクトのコードからデータを読み込んだりする前に、英語 (米国) のデータ形式 (ロケール ID 1033) を使用して書式設定する必要があります。

対象: このトピックの情報は、Excel 2007 と Excel 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

既定では、Visual Studio で Office ソリューションを開発する場合、Excel オブジェクト モデルはロケール ID 1033 によるデータの書式設定を予期します (これは、オブジェクト モデルがロケール ID 1033 にロックされているとも言います)。 この動作は、Visual Basic for Applications の動作方法と一致します。 ただし、この動作を Office ソリューションで変更できます。

Excel オブジェクト モデルで常にロケール ID 1033 が予期される理由

既定では、Visual Studio を使用して作成される Office ソリューションは、エンド ユーザーのロケール設定の影響を受けず、常にロケールが英語 (米国) であるものとして動作します。 たとえば、Excel で Value2 プロパティを取得または設定する場合、データはロケール ID 1033 が予期する方法で書式設定する必要があります。 別のデータ書式を使用すると、予期しない結果が得られる場合があります。

マネージ コードに渡されるデータや、マネージ コードによって処理されるデータに英語 (米国) の書式を使用した場合でも、Excel では、エンド ユーザーのロケール設定に従って、データが正確に解釈および表示されます。 Excel がデータを正確に書式設定できるのは、マネージ コードによってデータと共にロケール ID 1033 が渡されるからです。このロケール ID は、データが英語 (米国) の書式であることを示し、ユーザーのロケール設定に合わせてデータを再度書式設定する必要があることを示します。

たとえば、エンド ユーザーの地域オプションがドイツ語 (ドイツ) ロケールに設定されている場合、ユーザーは 2005 年 6 月 29 日という日付が 29.06.2005 として書式設定されることを期待します。 しかし、ソリューションがこの日付を文字列として Excel に渡す場合は、英語 (米国) の書式に従って 6/29/2005 と書式設定する必要があります。 セルが日付セルとして書式設定されていれば、Excel はこの日付をドイツ語 (ドイツ) の書式で表示します。

Excel オブジェクト モデルに他のロケール ID を渡す

.NET Framework 4 を対象とするプロジェクトでは、ロケールに依存するデータを受け入れる Excel オブジェクト モデルのすべてのメソッドとプロパティに対し、共通言語ランタイム (CLR: Common Language Runtime) によって自動的にロケール ID 1033 が渡されます。 オブジェクト モデルへのすべての呼び出しについてこの動作を自動的に変更する方法はありません。 ただし、InvokeMember を使用してメソッドを呼び出し、メソッドの culture パラメーターにロケール ID を渡すことで、特定のメソッドに別のロケール ID を渡すことができます。

.NET Framework 3.5 を対象とするプロジェクトでは、Visual Studio Tools for Office Runtime によって、既定でロケール ID 1033 が Excel オブジェクト モデルに渡されます。 ただし、この動作は、Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を使用して変更できます。

エンド ユーザー コンピューターのロケール設定を使用するための .NET Framework 3.5 プロジェクトの変更

.NET Framework 3.5 を対象とする Office プロジェクトでは、Excel オブジェクト モデル全体に対してロケール ID の動作のロックを解除できます。 これらのプロジェクトでの Excel オブジェクト モデルの動作は、Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute によって制御されます。 既定では、この属性は true に設定されており、Excel オブジェクト モデルがロケール ID 1033 の書式設定を予期するようロックされます。 この属性が true の場合、Visual Studio は、ソリューションでインスタンス化されるすべての Excel オブジェクトをプロキシ オブジェクトにラップします。このプロキシ オブジェクトは、常にロケール ID 1033 を Excel に渡します。 この属性を false に設定すると、これらのプロキシ オブジェクトは使用されず、Excel オブジェクト モデルはエンド ユーザーのロケール設定を使用します。

属性を false に設定する場合でも、リフレクションを使用して、Excel のプロパティおよびメソッドに対する特定の呼び出しで英語 (米国) のデータ形式 (ロケール ID 1033) を使用するように強制できます。 詳細については、「方法 : リフレクションを使用して Excel 内のリテラル文字列を領域保護する」を参照してください。

注意

この属性を false に設定した場合に、いずれかのエンド ユーザーのロケール設定が英語 (米国) 以外に設定されていると、そのユーザーについてはソリューションで予期しない動作が発生する場合があります。

オブジェクト モデルのロックを解除するには、プロジェクトにある AssemblyInfo.vb ファイルまたは AssemblyInfo.cs ファイルで、Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute を false に設定します。

<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]

注意

Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute が true の場合、Visual Studio Tools for Office Runtime はすべてのネイティブ Excel オブジェクトをプロキシ オブジェクトにラップするため、ネイティブ Excel オブジェクトに関連する一部の操作の速度が低下することがあります。 このような場合は、(プロキシを使用せずに) Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) メソッドを使用して Excel オブジェクトを取得し、そのオブジェクトを使用して処理を実行することで、パフォーマンスを向上させることができます。 このとき、Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap(System.Object) によって返されるオブジェクトは、ロケール ID 1033 ではなく、現在のスレッドのロケール ID を使用することに注意してください。

参照

処理手順

方法 : Excel ソリューションをローカライズする

方法 : リフレクションを使用して Excel 内のリテラル文字列を領域保護する

概念

Office ソリューションのデザインと作成

属性を使用したメタデータの拡張

Visual Studio Tools for Office Runtime の概要