14 Stimmen

Wie verwendet man Office von Visual Studio C# aus?

Die Technik zum Hinzufügen eines Verweises auf die COM-Interoperabilität von Office in Visual Studio besteht darin, zu gehen:

  1. Referenzen
  2. Referenz hinzufügen
  3. Wählen Sie die COM Registerkarte
  4. Wählen Sie Microsoft Office 11.0 Objekt-Bibliothek

Und wie von Zauberhand erscheint der Name der Referenz:

Microsoft.Office.Core

Le site Project.csproj zeigt die Details der Referenz:

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

Das Projekt wird in die Versionsverwaltung eingecheckt, und alles ist gut.


Dann wird ein Entwickler mit Büro 2007 holt das Projekt aus der Versionskontrolle und kann es nicht bauen, weil ein solcher Verweis nicht existiert.

Er (d. h. ich) checkt die .csproj-Datei aus, löscht den Verweis auf

Microsoft Office 11.0 Object Library

und fügt die COM-Referenz erneut ein als

Microsoft Office 12.0 Object Library

Und wie von Zauberhand taucht ein namentlicher Verweis auf:

Microsoft.Office.Core

Le site Project.csproj zeigt die Details der Referenz:

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

Das Projekt wird in die Versionsverwaltung eingecheckt, und alles ist gut.


Dann wird ein Entwickler mit Büro 2003 holt das Projekt aus der Versionskontrolle und kann es nicht bauen, weil ein solcher Verweis nicht existiert.

Er (d. h. nicht ich) checkt die .csproj-Datei aus, löscht den Verweis auf

Microsoft Office 12.0 Object Library

und fügt die COM-Referenz erneut ein als

Microsoft Office 11.0 Object Library

Und wie von Zauberhand taucht ein namentlicher Verweis auf:

Microsoft.Office.Core

Le site Project.csproj zeigt die Details der Referenz:

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

Das Projekt wird in die Versionskontrolle eingecheckt, und alles ist gut.

Dann wird das Projekt erstellt, auf CDs und an die Kunden versandt, die eine Büro 2007 .

Und nicht alles ist gut.


Früher (d.h. vor der .NET dll-Hölle) haben wir die Office-Objekte mit einer Versionsunabhängige ProgID d.h.:

"Excel.Application"

die sich auflöst in eine clsid des installierten Office, z.B.

{00024500-0000-0000-C000-000000000046}    

aus denen dann durch einen Aufruf von COM eine Klasse konstruiert wird (sprachlich-natürlicher Pseudocode):

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

Fragen

1) Welches ist die bewährte Technik zur Automatisierung der installierten Office-Anwendungen?

2) Was sind die Office 2003 Primäre Interop-Assemblys nützlich für?

3) Wenn ich die Office 2003 Primary Interop Assemblies verwende, muss ich dann Office 2003 installiert haben?

4) Wenn ich mit den Office 2003 Primary Interop Assemblies baue, sind meine Kunden dann für immer an Office 20003 gebunden?

5) Gibt es irgendwelche Büro 2007 Primäre Interop-Baugruppen ?

6) Wenn ich die Office 2007 Primary Interop Assemblies installiere, muss ich dann Office 2007 installiert haben?

7) Was ist falsch an der Verwendung von Standard-COM-Interop zur Steuerung von Excel, Word oder Outlook? z.B.:

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

8) Was erreicht man, wenn man eine

  • Referenz zu Artikeln auf der COM-Registerkarte ,
  • im Gegensatz zur Verwendung von [ComImport],
  • im Gegensatz zur Verwendung der Office 2007 Primäre Interop-Assemblys ?

9) Ist das Hinzufügen eines Verweises mit der COM-Registerkarte identisch mit der Verwendung von COM-Interoperabilität mit der Ausnahme, dass es eine Typenbibliothek bevor Sie es sehen können?

10) Sind die primären Interop-Assemblies von Office 2003 abwärts und aufwärts kompatibel mit: - Office 14 - Office 2007 - Office 2003 - Office XP - Office 2000 - Büro 97 - Büro 95

Wenn ein Kunde und ein Entwickler eine neue Version von Office installiert, wird diese dann noch funktionieren?

11) Müssen wir die Office 2003 Primary Interop Assemblies mit unserer Anwendung ausliefern?

12) Muss der Kunde die Office 2003 Primary Interop Assemblies installieren, bevor er unsere Anwendung nutzen kann?

13) Wenn ein Kunde die Office 2003 Primary Interop Assemblies installiert, muss er dann über Büro installiert?

14) Wenn ein Kunde die Office 2003 Primary Interop Assemblies installiert, muss er dann auch Office 2003 installiert?

15) Handelt es sich bei den Office 2003 Primary Interop Assemblies um eine kostenlose, einfache, weiterverteilbare Version von Office 2003?

16) Wenn auf meinem Entwicklungsrechner Office 2007 installiert ist, kann ich dann die Office 2003 PIAs verwenden und an einen Kunden mit installiertem Office XP liefern?

0 Stimmen

Sorry, ich kann nicht upvoten, keine Stimmen mehr. Aber es ist sicherlich würdig.

2voto

jcollum Punkte 39638

Wow, das ist eine riesige Anzahl von Fragen. Ich denke, wenn Ihre App die PIAs verwendet, gehen Sie im Allgemeinen davon aus, dass Ihre Zielgruppe eine bestimmte Version von Office installiert hat. Die PIAs werden im GAC installiert, wenn der Zielbenutzer Office installiert. Wenn sie Office nicht installiert haben, warum zielen Sie dann auf Office ab?

Ja, die Office dlls sind der richtige Weg, um Office zu automatisieren. Es gibt eine Liste der Assemblies aquí , darunter auch einige für Office 2007.

0 Stimmen

Die PIAs werden bei der Installation von Office nicht installiert, sonst hätte ich die Lösung erstellen können.

0 Stimmen

Ich habe herausgefunden, dass die PIAs nur bei der Installation von Office installiert werden: IFF sowohl Dotnet ist bereits installiert und auch Sie speziell wählen, um die gewünschten Net Interoperabilität Optionen zu installieren. Sie können jedoch jederzeit eine Reparaturinstallation durchführen und sie wieder hinzufügen. msdn.microsoft.com/de-us/library/aa679806(v=office.11).aspx Microsoft .NET Development for Microsoft Office 2003 Ich habe herausgefunden, dass es sehr schwierig ist, herauszufinden, ob die PIAs bereits registriert sind; Gacutil könnte helfen, aber ich habe diesen Weg aufgegeben.

2voto

Ian Boyd Punkte 232380

Die Antwort lautet: "Kopieren Sie die Assembly-DLL, die Sie für die Interop erhalten, lokal". Sobald Sie die Assembly-DLL in Ihrem Ausgabeordner haben, fügen Sie einen Verweis darauf hinzu und checken sie in die Versionskontrolle ein.

Jetzt hat jeder die referenzierte Assembly-DLL.

0 Stimmen

Hier erfahren Sie, wie Sie die Bibliothek bekommen: devcity.net/Artikel/163/1/

1voto

Roni Schwarts Punkte 31

Verwenden Sie VSTO (Visual Studio Tools for Office)?

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

0 Stimmen

Nein, ist VSTO eine Reihe von Tools? Oder ist es eine Support-Website, auf der man Fragen in einem offenen Forum stellen kann und sie von anderen Entwicklern beantwortet bekommt?

1voto

Jonno Punkte 1966

Ein altes Thema, und wahrscheinlich würden die meisten Leute mit CopyLocal=True zufrieden sein, aber hier ist ein anderer Weg. Verwenden Sie les deux (oder mehr ? Ich denke, Office 2010, wenn das Problem immer noch besteht ) Referenzen in Ihren Projektdateien, und entweder ignorieren oder nur MSBuild sagen, die "MSB3284" Warnung (Bibliothek nicht gefunden) zu ignorieren. Fügen Sie dies also in Ihre .csproj-Datei ein:

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

Gefolgt von:

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

Es würde mich interessieren, ob Microsoft eine NuGet-Bibliothek dafür bereitstellt - nur um alle auf den gleichen Ansatz zu bringen. Ich denke, das würde den Leuten die Notwendigkeit nehmen, im Internet nach diesen Antworten zu suchen... Ich glaube, dass dies gegen die Lizenz von Microsoft Office verstoßen würde, so dass sie die einzigen sind, die es anbieten können.

Übrigens muss man bei der lokalen Kopie darauf achten, dass man diese Bibliothek nicht versehentlich weitergibt.

0 Stimmen

Für die armen Seelen, die die Office-Bibliotheken auch ein Jahrzehnt nach der ursprünglichen Frage noch benötigen, bietet Microsoft jetzt ein Nuget-Paket an

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X