13

Visual StudioでOfficeのCOM相互運用機能への参照を追加するための手法は、次の場所に移動します。

  1. 参考文献
  2. 参照を追加
  3. [ COM ]タブを選択します
  4. MicrosoftOffice11.0オブジェクトライブラリを選択します

そして、魔法の名前の参照が表示されます:

Microsoft.Office.Core

このProject.csprojファイルには、参照の詳細が示されています。

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>3</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

そして、プロジェクトはソース管理にチェックインされ、すべてが順調です。


次に、Office 2007の開発者は、ソース管理からプロジェクトを取得しますが、そのような参照が存在しないため、プロジェクトをビルドできません。

彼(つまり私)は.csprojファイルをチェックアウトし、への参照を削除します

Microsoft Office 11.0 Object Library

COM参照を次のように再追加します

Microsoft Office 12.0 Object Library

そして魔法のように名前付きの参照が表示されます:

Microsoft.Office.Core

このProject.csprojファイルには、参照の詳細が示されています。

<COMReference Include="Microsoft.Office.Core">
  <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>4</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

そして、プロジェクトはソース管理にチェックインされ、すべてが順調です。


次に、Office 2003の開発者は、ソース管理からプロジェクトを取得しますが、そのような参照が存在しないため、プロジェクトをビルドできません。

彼(つまり私ではない)は.csprojファイルをチェックアウトし、への参照を削除します

Microsoft Office 12.0 Object Library

COM参照を次のように再追加します

Microsoft Office 11.0 Object Library

そして魔法のように名前付きの参照が表示されます:

Microsoft.Office.Core

このProject.csprojファイルには、参照の詳細が示されています。

<COMReference Include="Microsoft.Office.Core">
  <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>3</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

そして、プロジェクトはソース管理にチェックインされ、すべてが順調です。

次に、プロジェクトがビルドされ、CDにプレスされ、 Office2007を使用している顧客に送信されます。

そして、すべてがうまくいっていません。


昔(つまり、.NET dll地獄の前)では、バージョンに依存しないProgIDを使用してOfficeオブジェクトを参照していました。

"Excel.Application"

これは、インストールされたOfficeのclsidに解決されます。

{00024500-0000-0000-C000-000000000046}    

次に、COM(言語-ネットワーク擬似コード)の呼び出しを使用してクラスが構築されます。

public IUnknown CreateOleObject(string className)
{
    IUnknown unk;

    Clsid classID = ProgIDToClassID(className);
    CoCreateInstance(classID, null, 
          CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, 
          IUnknown, out unk);

    return unk;
}

質問

1)インストールされたOfficeアプリケーションを自動化するために承認された手法は何ですか?

2)Office 2003プライマリ相互運用機能アセンブリは何に役立ちますか?

3)Office 2003プライマリ相互運用機能アセンブリを使用する場合、Office 2003をインストールする必要がありますか?

4)Office 2003プライマリ相互運用機能アセンブリを使用してビルドした場合、顧客はOffice 20003に永久に結びついていますか?

5)Office 2007のプライマリ相互運用機能アセンブリはありますか?

6)Office 2007プライマリ相互運用機能アセンブリをインストールする場合、Office 2007をインストールする必要がありますか?

7)標準のCOM相互運用機能を使用してExcel、Word、またはOutlookを駆動することの何が問題になっていますか?例えば:

[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}

8)追加したときに達成するものは何ですか

  • [COM]タブの項目への参照
  • [ComImport]を使用するのではなく、
  • Office 2007プライマリ相互運用機能アセンブリを使用するのとは対照的に?

9)COMタブを使用して参照を追加することは、表示する前にタイプライブラリが必要であることを除いて、COM相互運用機能を使用することと同じですか?

10)Office2003プライマリ相互運用機能アセンブリは下位互換性と上位互換性がありますか。-Office14-Office2007-Office 2003-Office XP-Office 2000-Office 97-Office 95

顧客と開発者が新しいバージョンのOfficeをインストールした場合でも、それは機能しますか?

11)アプリケーションと一緒にOffice 2003プライマリ相互運用機能アセンブリを出荷する必要がありますか?

12)お客様は、アプリケーションを使用する前に、Office 2003プライマリ相互運用機能アセンブリをインストールする必要がありますか?

13)お客様がOffice 2003プライマリ相互運用機能アセンブリをインストールする場合、Officeをインストールする必要がありますか?

14)お客様がOffice 2003プライマリ相互運用機能アセンブリをインストールする場合、Office 2003をインストールする必要がありますか?

15)Office 2003 Primary InteropAssemblesは無料の軽量で再配布可能なバージョンのOffice2003ですか?

16)開発マシンにOffice 2007が搭載されている場合、Office 2003 PIAを使用して、Office XPがインストールされている顧客に出荷できますか?

4

4 に答える 4

2

答えは、相互運用機能用に取得したアセンブリdllを「ローカルにコピー」することです。出力フォルダーにアセンブリdllを配置したら、そのdllへの参照を追加し、ソース管理にチェックインします。

これで、誰もが参照されるアセンブリdllを持っています。

于 2009-01-12T19:00:52.857 に答える
2

うわー、それは膨大な数の質問です。一般に、アプリが PIA を使用している場合、対象ユーザーが何らかのバージョンの Office をインストールしていると想定していると思います。ターゲット ユーザーが Office をインストールすると、PIA が GAC にインストールされます。Office がインストールされていない場合、なぜ Office をターゲットにしているのですか?

はい、Office dll は Office を自動化する正しい方法です。Office 2007 用のアセンブリを含むアセンブリのリストがここにあります。

于 2008-12-30T22:13:17.113 に答える
1

古いスレッド、そしておそらくほとんどの人はCopyLocal = Trueに満足するでしょうが、ここに別の方法があります..プロジェクトファイルで両方の(またはそれ以上..?問題がまだ存在する場合はOffice 2010を考えて..)参照を使用し、どちらかを無視しますまたは、「MSB3284」警告を無視するようにMSBuildに指示します(ライブラリが見つかりません)。したがって、これを.csprojファイルに含めます。

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>3</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

に続く:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>4</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

マイクロソフトがこのためのNuGetライブラリを提供しているかどうかを確認したいと思います。これは、全員が同じアプローチを利用できるようにするためです。そうすれば、人々がこれらの答えをWebで検索する必要がなくなると思います...これはMicrosoft Officeのライセンスに反するので、提供するのは彼らだけだと思います。

ところで、コピーローカルでは、これらのライブラリを誤って再配布しないように注意する必要があります。

于 2011-12-20T07:29:45.143 に答える
1

VSTO (Visual Studio Tools for Office) を使用していますか?

http://msdn.microsoft.com/en-us/office/aa905533.aspx

于 2008-12-30T22:05:02.247 に答える