Excel während COM-Eintrag sperren

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Excel während COM-Eintrag sperren

Beitrag von Benz »

Hi,

ich lese eine größere Menge Daten in ein leere Excel-Datei ein, die noch nirgends gespeichert ist. Deshlab will ich Excel im Vordergrund laufen lassen, sodass der Benutzer beim Schließen gefragt wird, wie er die Datei speichern will.
Jetzt habe ich allerdings ein Problem und zwar wenn der Benutzer während dem Einlesen der Daten (zeilenweise) mit der Maus in irgendeine Zelle klickt, so wird das Einlesen sofort gestoppt und eine Fehlermeldung (s. Anhang) wird erzeugt und das Programm anschließend beendet.

Gibt es eine Möglichkeit Aktionen vom Benutzer in Excel zu unterdrücken und zwar so lange wie die COM Daten einliest?
Google gibt mir leider keine Infos, außer dass ich den PC in der Zeit sperren soll, aber das kann keine Lösung sein, dafür ist die COM zu langsam..

Und noch eine weitere Frage: Hat jemand einen Link für eine Befehlssammlung zu ActiveX - Komponenten zu Word, Excel, Outlook, etc.. ?
Kann mir vorstellen, dass es schon zickmal angesprochen wurde, allerdings finde ich keine wirklichen Links, die das unter den Programmen wirklich aufteilen.
Dateianhänge
Fehler.png
Fehler.png (26.64 KiB) 13560 mal betrachtet
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Rolf Ramacher »

Guten Morgen benz,

versuche es mal mit visible:=.t. und später auf .f. zu setzen. Eine Sammlung der Befehle habe ich nicht und dies wurde hier schon öfters diskutiert. Sovile wie ich weiß, sind diese active-x befehle von mircosoft nicht aussreichend dokumentiert.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh »

Ich würde visible auf .f. setzen bis die ganze Aktion durch ist und in Xbase++ z.B. einen Fortschrittsmeldung ...
Erst am Ende dann auf .t. (dann kommt Excel nach vorne und kann bedient werden.).

Du könntest aber auch einfach gleich den kompletten Dateinamen mit Pfad übergeben und automatisch speichern lassen.

Wenn du die Aktionen von Excel aber zeigen willst und die Eingaben sperren, könnte es funktionieren in Xbase++ ein Dialog/control zu erzeugen, der transparent ist und somit unsichtbar.
Dieses Systemmodal anzeigen und hoffen dass keine Benutzereingaben nötig werden ;-)
Ein solches Fenster könnte natürlich auch kleiner sein mit "Bitte warten ..." und eventuell einem Abbruch Button. Systemmodal verhindert Eingaben in andere Fenster.
Gruß
Hubert
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von Benz »

Hm ok. Das mit visible := .F. scheint für mich die beste Alternative, weil das schon ziemlich lange dauert und für die Benutzer schwierig wird, wenn sie keine anderen Eingaben mehr machen können. Ein Statusanzeiger wäre schon nicht schlecht, ich denke da immer an eine Progressbar aber ich habe so eine leider noch nie benutzt und weiß auch nicht wo ich die herbekomme. Könnt ihr mir da weiterhelfen?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh »

Wenn die User anders arbeiten sollen, dann ist eine Laufanzeige nicht so toll (keine wirkliche Info)
Besser einen kleinen Dialog machen "Erledigt x von nMax" mit Abbrechen button und den ON TOP anzeigen.
Dann kann jeder machen was er will (außer Excel) und sieht doch die Anzeige.
Gruß
Hubert
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Wolfgang Ciriack »

Also bei meinem Office 2003 findet man die Objectmodelle mit Methoden, Properties etc. als Hilfedateien unter
...\Microsoft Office\Office11\1031.
Wenn diese jemand haben möchte (ca. 5.5MB für Excel, Word,Outlook) so bitte eine Mail an mich (ciriack_at_ciju.de)
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR »

Rolf Ramacher hat geschrieben:Eine Sammlung der Befehle habe ich nicht und dies wurde hier schon öfters diskutiert. Sovile wie ich weiß, sind diese active-x befehle von mircosoft nicht aussreichend dokumentiert.
Wolfgang zeigt ja wo sich bei Office XP 2003 noch die Help Files sind aber ab Office 2007 (mit Ribbonbar)
gibt es Help Files nur noch mit Online Verbindung z.b. "im" Macro-Editor bei F1.

auf der Start Seite http://msdn.microsoft.com/de-de/library ... 62978.aspx muss man auswählen welche Produkt man haben will.

z.b. Excel http://msdn.microsoft.com/de-de/library ... 79694.aspx
und dann rechts auf den Link zur API Referenz ( von Excel ) http://msdn.microsoft.com/en-us/library/ee861528.aspx
jetzt wählt man das "Object model" http://msdn.microsoft.com/en-us/library/ff194068.aspx
und kann sich die Members und deren Properties, Methods und Events ansehen.
Benz hat geschrieben:Gibt es eine Möglichkeit Aktionen vom Benutzer in Excel zu unterdrücken und zwar so lange wie die COM Daten einliest?
wenn du o:visible := .F. hast "sieht" der User es ja gar nicht und es ist auch "schneller" beim befüllen.

grundsätzlich ist die activeX Schnittstelle bei Office bidirektional d.h. Excel "sendet" auch Events wenn der User eine Aktion auslöst ( die man dann unterbinden kann )
gruss by OHR
Jimmy
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von Benz »

AUGE_OHR hat geschrieben:
Rolf Ramacher hat geschrieben:Eine Sammlung der Befehle habe ich nicht und dies wurde hier schon öfters diskutiert. Sovile wie ich weiß, sind diese active-x befehle von mircosoft nicht aussreichend dokumentiert.
Wolfgang zeigt ja wo sich bei Office XP 2003 noch die Help Files sind aber ab Office 2007 (mit Ribbonbar)
gibt es Help Files nur noch mit Online Verbindung z.b. "im" Macro-Editor bei F1.

auf der Start Seite http://msdn.microsoft.com/de-de/library ... 62978.aspx muss man auswählen welche Produkt man haben will.

z.b. Excel http://msdn.microsoft.com/de-de/library ... 79694.aspx
und dann rechts auf den Link zur API Referenz ( von Excel ) http://msdn.microsoft.com/en-us/library/ee861528.aspx
jetzt wählt man das "Object model" http://msdn.microsoft.com/en-us/library/ff194068.aspx
und kann sich die Members und deren Properties, Methods und Events ansehen.
Benz hat geschrieben:Gibt es eine Möglichkeit Aktionen vom Benutzer in Excel zu unterdrücken und zwar so lange wie die COM Daten einliest?
wenn du o:visible := .F. hast "sieht" der User es ja gar nicht und es ist auch "schneller" beim befüllen.

grundsätzlich ist die activeX Schnittstelle bei Office bidirektional d.h. Excel "sendet" auch Events wenn der User eine Aktion auslöst ( die man dann unterbinden kann )

Das ist schonmal ein riesen Fortschritt und beinahe das was ich gesucht habe. Leider gibt Microsoft da wohl nicht alles frei oder ich finde das weiterführende nicht.
Jedenfalls wenn ich hier bin http://msdn.microsoft.com/en-us/library/ff839770.aspx dann sehe ich dass "Font" das letzte in der Hierarchie ist, allerdings gehören zu "Font" ja noch weitere Eigenschaften wie z.B. "Name" (s. Beispiel) und "Color" habe ich aus dem Forum. Aber woher bekomme ich die restlichen Eigenschaften von Font? Wie kann ich z.B. den Text einer Zelle fett machen?
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Wolfgang Ciriack »

Hier meine Funktion um einen Bereich in Excel mit Daten aus einem Array (bevorzugt, da sehr schnell) zu befüllen und den Font zu setzen:

Code: Alles auswählen

static FUNCTION SetExcelValue(cRange,oWorkSheet,xValue)
LOCAL oRange
oRange := oWorkSheet:Range(cRange)
oRange:Select()
oRange:Value := xValue
oRange:Font:Name:="Arial"
oRange:Font:Size:=8
oRange := nil
RETURN nil
Einzelne Zellen kannst du mit verschiedenen Eigenschaften versehen, z.B.

Code: Alles auswählen

   oWorkSheet:Columns( 5 ):NumberFormat := "#.#0,00"
   oWorkSheet:Columns( 6 ):NumberFormat := "0 %"
   oWorkSheet:Columns( 8 ):AutoFit()
Viele Grüße
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh »

Hi, suche doch mal nach *excel* und du wirst viele Einträge finden, schon in den Überschriften sind dann jede Menge Anregungen.

auch oExcel oder oBook oder oSheet oder oWorksheet sind dankbare Suchbegriffe zu dem Thema
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Koverhage »

damit
oExcel:Range("A1"):Font():Bold := .t.

Beispiel:
oExcel:Range("A1:I1"):Value := aHeader //Spaltenüberschriften im Array
oExcel:Range("A1:I1"):Font():Size := 10 //Schriftgrösse ändern
oExcel:Range("A1:I1"):Font():Name := "Times" //Schrift festlegen
oExcel:Range("A1:I1"):Font():Bold := .t.
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR »

Benz hat geschrieben:Jedenfalls wenn ich hier bin http://msdn.microsoft.com/en-us/library/ff839770.aspx dann sehe ich dass "Font" das letzte in der Hierarchie ist, allerdings gehören zu "Font" ja noch weitere Eigenschaften wie z.B. "Name" (s. Beispiel) und "Color" habe ich aus dem Forum. Aber woher bekomme ich die restlichen Eigenschaften von Font? Wie kann ich z.B. den Text einer Zelle fett machen?
unter dem Link findest du in Zeile 3 das
Returns a Font object that represents the font of the specified object.
das ist ein Link zu http://msdn.microsoft.com/en-us/library/ff840959.aspx
wenn du dann auf Properties gehst bekommst du alle Eigenschaften die ein Font hat.
gruss by OHR
Jimmy
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von Benz »

Das war viel zu einfach als dass ich es selbst hätte herausfinden können :banghead:

Danke!!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR »

Benz hat geschrieben:... ich denke da immer an eine Progressbar aber ich habe so eine leider noch nie benutzt und weiß auch nicht wo ich die herbekomme. Könnt ihr mir da weiterhelfen?
in der DXE Lib (Wissensbasis) findest du ein "native" Progressbar Control.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh »

Alaska hat für Subscriptionskunden einige neue Controls im Quellcode veröffentlicht, darunter auch ein Progressbar.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Alaska hat für Subscriptionskunden einige neue Controls im Quellcode veröffentlicht, darunter auch ein Progressbar.
und der ist sogar "native" ;)

Code: Alles auswählen

...
   nHWND := CreateWindowExA( 0, PROGRESS_CLASSA, 0, ::nStyles, ;
                             0,0, aSize[1],aSize[2],      ;
                             ::SetParent():GetHWND(), 0,  ;
                             GetModuleHandleA(0), 0 )
...
gruss by OHR
Jimmy
Antworten