OLE mit Excel

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

:(

nein, ich bin bei meinen Versuchen bisher auch gescheitert und über eine scheinbar gestartete Instanz von Excel bin ich nicht hinausgekommen. Und mit dieser Instanz konnte ich nicht viel anfangen, wie du ja oben lesen kannst.

Was hast du vor? Auch eine Umwandlung der DAten oder möchtest du Exceltabellen direkt bearbeiten?
Johannes

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Beitrag von moritz »

Schade, Monta, genau so weit (oder so nah) bin ich auch gekommen. Das war gar nichts.
Eigentlich geht es mir nicht um Excel, da ich nicht damit arbeite, nur um OpenOffice. Aber Excel und Word sind unter Windows als 1. Versuch etwas leichter zu handhaben. Wenn Excel unter Win funktioniert, bekomme ich auch die OO- Schnittstelle unter Win gebacken
Ich habe von einem Entwickler eine alte Version eines unter Delphi entwickelten Datenbankprogrammes (mit Paradox- Datenbank) bekommen, was ich für meine Zwecke ohne Delphi anpassen und langfristig unter Linux (mit Firebird) laufen lassen will. Dabei ist die Datenübergabe an ein Office- Programm notwendig, weil sich manche Dinge mit der Tabelle viel einfacher und flexibler programmieren lassen. Auch den Ausdruck würde ich gern über ein Writer- Dokument realisieren. Theoretisch wäre auch die Ausgabe in eine Textdatei und das Einlesen in eine OO- Datei möglich. Nach meinen guten Erfahrungen mit VBA und OO (Datenübergabe von AutoCad nach Calc) würde ich aber gern die Daten direkt an OO übergeben, ohne umständliche Konstruktionen.
Vielleicht kann af0815 seinen Code mit Outlook veröffentlichen? Der Zugriff auf Excel/Word muß doch ähnlich sein.
Aber mittlerweile glaube ich, daß entweder ich mit Lazarus überfordert bin, oder Lazarus mit meinen Anforderungen oder auch beides. Sehr Schade.
Moritz

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Mit Excel hab ichs nicht probliert lediglich Outlook aber bei OO weiss ich definitiv das der Datentransfer zwischen Calc und Lazarus funktioniert. Ich schau mal ob ich was mit Excel gebacken kriege frag mich aber schon wieder wiso dazu noch keine Bugreports existieren ihr eiuch hier aber reihenweise ausheult. Das nützt keinem was.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Beitrag von moritz »

Ich weiß doch noch gar nicht, ob das ein bug ist oder ich bloß zu blöd bin. Ich mach meine ersten Versuche mit Lazarus. Es hat aber auch keinen Zweck, wenn ich mich intensiv von der Pike auf mit Lazarus beschäftige, und dann erst merke, daß eben verschiedene für mich sehr wichtige Dinge mit Lazarus (noch) nicht möglich sind.
Aber wenn der Datentransfer mit OO funktioniert, bin ich schon sehr glücklich. Wie gesagt, mit Word, Excel und Outlook arbeite ich (fast) nicht.
Moritz

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6764
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Christian hat geschrieben:Ich schau mal ob ich was mit Excel gebacken kriege frag mich aber schon wieder wiso dazu noch keine Bugreports existieren ihr eiuch hier aber reihenweise ausheult. Das nützt keinem was.
Nene Bugreport ist nur sinnvoll wenn es ein Bug ist. Momentan habe ich bei der Sache genau dieselben Probleme wie alle anderen, nur bin ich noch nicht in die Tiefe vorgedrungen. Das ist der Grund, das es nichts in Richtung Bugreport.

Wenn du was gebacken kriegst, dann bitte öffentlich, damit ich wenigstens weiß WO ich zu dämlich war/bin.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Na ganz so zurückhaltend seh ich das nicht wenn der Standart Delphi Code dafür nicht läuft muss noch irgendwas mit der Ole Implementierung im argen sein.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

OLE, Uno_Bridge

Beitrag von moritz »

Hallo,
bei jetzt hatte ich (unter XP) keinen Erfolg mit Excel / OO und Lazarus.
Habe alles vorher mit delphi getestet und es hat funktioniert
Mit OLE kommt zur Laufzeit die Fehler Meldung "Project raised exception class 'EOleException'.
Hier scheint tatsächlich ein Bug in Lazarus zu sein.
Für OO habe ich eigene Versuche, aber auch die Programme vom französischen OO Projekt verwendet (Drive OpenOffice with COM Automation from Delphi).
OO läßt sich unter Linux und Windows auch über UNO steuern. Zur Vereinfachung ist die Bibliothek "uno_pascal_brigde v. 0.9.2" bei sourceforge herunterladbar. Unter delphi läuft sie auch ziemlich stabil. Wenn man von Starbasic kommt, ist Uno zwar recht kompliziert, man kann aber damit zurechtkommen.
Mit Lazarus habe ich es leider nicht geschafft, den Quelltext zu kompilieren. Es gibt Fehlermeldungen, die ich aber überhaupt nicht nachvollziehen kann. Das Programm soll mit fpc laufen, bei mir aber nicht. Unter Suse10.3 hab ich nicht getestet, vermutlich aber mit dem gleichen Ergebnis.
Vielleicht kommt ein anderer damit weiter als ich. Würd mich über Tips freuen.
Viel Spaß damit
Moritz

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Beitrag von shokwave »

Hi Leute,

hab mich mit OLE bisher nicht auseinandergesetzt, fand die Idee aber sinvoll und hab dazu folgendes gefunden:

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Windows,
  Messages, StdCtrls, ComObj, Variants;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    function CreateTextDocument(): Variant;
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
function TForm1.CreateTextDocument(): Variant;
  var
    objServiceManager: Variant;
    Stardesktop: Variant;
    doc: Variant;
    mytext: Variant;
begin
  objServiceManager := CreateOleObject('com.sun.star.ServiceManager');
  Stardesktop := objServiceManager.createInstance('com.sun.star.frame.Desktop');
  doc := Stardesktop.LoadComponentFromURL('private:factory/swriter', '_blank', 0, VarArrayCreate([0, - 1], varVariant));
  mytext := doc.getText;
  mytext.setString('Hello World');
  CreateTextDocument := Doc;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateTextDocument;
end;
 
 
initialization
  {$I unit1.lrs}
 
end.
Öffnet den OOo-Writer und schreibt 'n bissl Text.
Hoffe es hilft weiter

mfg Ingo
mfg Ingo

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Wie wäre es denn mit Excel ohne OLE: http://wiki.lazarus.freepascal.org/Office_Automation" onclick="window.open(this.href);return false;

knight

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Naja, soweit ich das seh, geht es ja dort mehr darum, Excelkompatible Dateien zu erstellen. Excel wird da ja nicht gebraucht. Aber das hilft ja nichts, wenn man gerade auf die Möglichkeiten von Excel was konvertierungen usw. angeht, zugreifen will.

Ich für meinen Teil wollte ja, wie es auch andere Programme vormachen, Excel dazu nutzen, um Dateien darin zu öffnen und als CSV wieder abzuspeichern. Und das wird leider nicht ohne OLE gehn.
Johannes

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Beitrag von shokwave »

Ich glaub da ist doch ein Bug. In dem kleinen Testproggi kommen die unmöglichsten OLE-Fehlermeldungen.
Ersetze ich jedoch die Variablen(in der OOUse.pas), zur Übergabe der Dateinamen und des Textes, durch den String selbst, funktioniert der Code. :?:

Ich möchte nicht zu voreilig einen Bugreport machen, also poste ich erstmal hier.

LCL 0.9.25 (SVN 13426), FPC 2.2.1, WinXP
Dateianhänge
#OLE_OOo.zip
(3.67 KiB) 121-mal heruntergeladen
mfg Ingo

PeterK
Beiträge: 6
Registriert: Do 15. Sep 2011, 15:35

Re: OLE mit Excel

Beitrag von PeterK »

Alten Thread ausgrab ...
...
....

Bei mir geht's auch soweit gut:

Code: Alles auswählen

Excel := CreateOleObject( 'Excel.Application');
  Excel.visible := true;
  WB:= Excel.WorkBooks.Open( Path + 'Mappe1.xls');
Bis hier alles okay, das Dokument wird geöffnet (soweit vorhanden ..) und angezeigt
.. und auch bei mir gibt es hier Exceptions:

Code: Alles auswählen

TRY
  Excel.Cells[1,1].Value:= OleVariantStr;  
EXCEPT ...
(oder jede andere bekannte Art, Excel-Felder zu lesen oder zu beschreiben ...)

Z.B:
- Excel.Sheets[1].Name := 'DP Sheet'; => Exception


Was funktioniert :

Code: Alles auswählen

- Excel.Sheets.Add;  //einen neuen Sheet hinzufügen - OKAY !
- Excel.ActiveWorkbook.SaveAs('C:\Blub.xls');   // OKAY !
- Excel.Workbooks.Add;    // OKAY !
Hat sich seit 2008 hier nichts mehr getan ?
Weiss inzwischen jemand wo der Fehler steckt ?
Zuletzt geändert von Lori am Mi 23. Nov 2011, 16:40, insgesamt 1-mal geändert.
Grund: Highlighter

PeterK
Beiträge: 6
Registriert: Do 15. Sep 2011, 15:35

Re: OLE mit Excel

Beitrag von PeterK »

Jetzt habe ich ENDLICH etwas gefunden das funktioniert :

Code: Alles auswählen

Excel.Range('B6'):= 'B6';
und zwar hier:
http://freepascal.ru/forum/viewtopic.php?f=5&t=6249" onclick="window.open(this.href);return false;

Warum aber

Code: Alles auswählen

Excel.Cells(2,6).Value:= 'B6';
nicht geht, verstehe wer will ... :-(

Antworten