Autor Beitrag
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 06.03.13 15:39 
Ich habe gerade ein Brett vor dem Kopf. Vermutlich zuviel von der ungewohnten Sonne eingebrannt. :)

Ich habe ein Excel-Dokument vorliegen, in dem ein Word-Objekt eingebettet ist.
Nun möchte ich gerne an den Inhalt des Word-Objektes.
Inzwischen habe ich soviel versucht, dass ich mich irgendwie verrannt habe.
Mein letzter Ansatz (Ich arbeite mit late binding):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  var
    WordDoc : Variant;
  begin
    WordDoc := ExcelApp.ActiveSheet.OLEObjects('Objekt XY');
    Result := WordDoc.Content.Text;
  end;

In dieser Variante erzählt er mir zur Laufzeit, dass er Content nicht kennt.

Die auskommentierten Fehlversuche habe ich rausgeschmissen.
Vermutlich sehe ich einfach den Wald vor lauter Bäumen inzwischen nicht mehr. Das kann doch nicht so kompliziert sein :motz:
jasocul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 08.03.13 08:27 
Hat wirklich keiner eine Idee?
Ich habe mal ein Beispiel in den Anhang gepackt
Einloggen, um Attachments anzusehen!
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 08.03.13 14:38 
Hab eben mal kurz in den alten Postings von borland.public.delphi.oleautomation gestöbert und herausgefunden, daß es zwischen 2003 und 2008 etliche Anfragen bezüglich Zugang zu embedded documents gab, von denen keine einzige beantwortet wurde. Das läßt den Schluß zu, daß es schon damals keiner wußte ... und ich hab leider auch keinen blassen Schimmer ...

Für diesen Beitrag haben gedankt: jasocul
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 378
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Fr 08.03.13 19:16 
Ich habe eben in VisualBasic für eine EXCEL-Tabelle mit eingebettetem Word-Dokument ein Makro gemacht:

Sub Makro2()
ActiveSheet.OLEObjects(1).Visible = False
WordDoc = ActiveSheet.OLEObjects(1)
End Sub

Ergebnis: "Visible" schaltet richtig mein Word-Doc unsichtbar (bzw. wieder sichtbar, wenn ich True einsetzte.)
Bei der Zuweisung WordDoc = ... erhalte ich aber die Fehlermeldung "Object unterstützt diese Eigenschaft oder Methode nicht."

Idee: ActiveSheet.OLEObjects(1).copy kopiert das Word-Doc in die Zwischenablage.

Vielleicht hilft es ja,

Gruß
GuaAck
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Fr 08.03.13 23:47 
user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe eben in VisualBasic für eine EXCEL-Tabelle mit eingebettetem Word-Dokument ein Makro gemacht:

Das wird im vorliegenden Fall aber nichts nützen. Sobald man in Excel das Objekt aktiviert, wechselt innerhalb von Excel die Menüleiste in eine Word-Menüleiste. Man befindet sich dann in Word. Excel-Makros funktionieren hier nicht, sondern nur Word-Makros.

Man kann das leicht austesten: In Excel die Makro-Aufzeichnung starten, die Bearbeitung des Objekts mit einem Doppelklick starten und etwas in dem Dokument machen (z. B. Text selektieren). Danach innerhalb von Excel eine beliebige Zelle selektieren, um die Bearbeitung des Objekts zu beenden. Schaut man sich jetzt das Makro einmal an, wird man feststellen, dass alle Aktionen zur Bearbeitung des Objekts im Makro nicht auftauchen.

Die einzige Möglichkeit, das Ziel zu erreichen, besteht darin, die Excel-Datei als XLSX-Datei abzuspeichern und anschließend die Dateiendung in ZIP abzuändern. Die Worddatei findet man anschließend in der Zip-Datei im Verzeichnis "xl/embeddings".
jasocul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: So 10.03.13 18:08 
Hmm. Dann betrachte ich das erstmal als erledigt.
Falls ich beim rumtüfteln noch eine Lösung finden sollte, steht die natürlich sofort hier. :wink:

Auf jeden Fall danke ich euch für die Unterstützung.
jasocul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 11.03.13 10:24 
So habe die Lösung selbst rausgefunden :mrgreen:

Es ist zwar noch ohne irgendwelche Tests und Sicherheitsabfragen, aber im Prinzip funktioniert es so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  function GetObjektData(ObjName : String) : String;
  // Ein Embedded Word-Objekt innerhalb Excel auslesen
  var
    WordDoc : Variant;
    WordApp : Word_TLB._Application;
  begin
    Result := '';
    try
      WordDoc := xlsWS.OLEObjects(ObjName);
      WordDoc.Activate; // Ohne Activate kann im nächsten Schritt die Application nicht zugeordnet werden
      WordApp := IDispatch(WordDoc.Object.Application) as Word_TLB._Application;

      Result := WordApp.ActiveDocument.Content.Text;
    except
    end;
    Result := Trim(Result);
  end;

Das ist nur ein Grundgerüst!
Es können ja auch andere Objekte im Excelsheet enthalten sein, was hier nicht geprüft wird.
Die Variable xlsWS kommt aus der übergeordneten Prozedur und ist vom Typ Variant (Excel-Worksheet).

@Mods:
Habe die letzten Beiträge nicht zusammengefasst, damit der Thread nochmal nach oben kommt. Es gab doch eine Menge Hits und könnte daher für mehrere interessant sein. Zumal es ja wohl sonst noch keine Lösung zu finden gibt.