Programmierung

Component Object Model (COM)

Des Öfteren kommt es im Support zu Meldungen, dass auf einmal eine über die COM-Schnittstelle eingebundene MS Office Anwendungen nicht mehr wie erwartet reagiert.

Die COM-Schnittstelle (Abkürzung für Component Object Model) ist eine von Microsoft entwickelte Plattformtechnik, um unter dem Betriebssystem Windows Interprozesskommunikation und dynamische Objekterzeugung zu ermöglichen.
Dies bedeutet unter anderem, dass man aus der eigenen Anwendung heraus mit Hilfe der COM-Schnittstelle, andere Anwendungen (meist MS Office Anwendungen wie Word, Excel, Outlook, Powerpoint usw.), fernsteuern kann.

Prinzipiell ist die COM-Schnittstelle eine Weiterentwicklung der OLE Architektur:

• Object Linking and Embedding (OLE1)

• Object Model (OLE2) (COM Standard)

Folgendes Diagramm veranschaulicht diesen Zusammenhang:

In CONZEPT 16 wurde das Component Object Model mit der Version 4.5.00 im Jahre 2002 eingeführt.

Infolgedessen lassen sich durch Zuhilfenahme der COM-Schnittstelle viele Aufgaben wie zum Beispiel Serienbrieffunktionen oder Emailfunktionen einfach in der eigenen Anwendung realisieren.

Kommt es jetzt aber, wie eingangs erwähnt, zu dem Effekt, dass eingebundene MS Office Anwendungen nicht mehr wie erwartet reagieren, dann hängt dies meistens mit einem zwischenzeitlich durchgeführten Windows Office Update auf eine neuere Version zusammen. Denn oftmals kommt es bei einem Windows Office Update vor, dass sich beispielsweise Word-Basic Befehle von einer Version auf die andere ändern.

Daher ist es vorab meist sinnvoll, die aktuelle eingesetzte Version des Office-Programms zu ermitteln, um dann dementsprechend auf die jeweilige Versionsunterschiede reagieren zu können.

 9.0   Excel 2000
 10.0   Excel XP/2002
 11.0   Excel 2003
 12.0   Excel 2007
 13.0   ausgelassen wegen „Triskaidekaphobie“ – Angst vor Unglückszahl 13 !!
 14.0   Excel 2010

Um zum Beispiel aus CONZEPT 16 heraus abzufragen, welche Excel Version aktuell auf dem Computersystem installiert ist, könnte die unten aufgeführte Routine verwendet werden.
Abhängig von der ermittelten Excel Version ist es dann im weiteren Verlauf auch möglich, den zu verwendenden Befehlssatz festzulegen.


// *******************************************************************
// *                                                                 *
// *  COM - Excel Versions Abfrage                                   *
// *                                                                 *
// *******************************************************************

@A+
@C+

main()
local
{
  tExcel.App         : handle;
  tExcel.Version     : alpha;
}
{
  // Verbindung zu Excel herstellen
  tExcel.App # ComOpen('Excel.Application', _ComAppCreate);

  // Excel Version ermitteln
  tExcel.Version # tExcel.App->cpaVersion;

  // Excel Version Anzeigen
  WinDialogBox(
    0,
    'Excel',
    'Sie verwenden Excel Version ' +
    tExcel.Version + '!', 0, 0, 0
  );

  // Excel-Befehle je nach Version festlegen
  if (CnvFA(tExcel.Version, _FmtNumPoint) >= 12.0)
  {
    // ...
  }
  else
  {
    // ...
  }

  // Verbindung zu Excel schließen
  tExcel.App->ComClose();
}
Keine Kommentare

Kommentar abgeben