Hinweise zum neuen Forum
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Excel während COM-Eintrag sperren

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 413
Registriert: Mo, 30. Mai 2011 15:06

Excel während COM-Eintrag sperren

Beitrag von Benz » Di, 03. Sep 2013 9:03

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) 3264 mal betrachtet

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1815
Registriert: Do, 09. Nov 2006 11:33
Wohnort: Bergheim
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Rolf Ramacher » Di, 03. Sep 2013 9:07

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: 13588
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh » Di, 03. Sep 2013 9:35

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: 413
Registriert: Mo, 30. Mai 2011 15:06

Re: Excel während COM-Eintrag sperren

Beitrag von Benz » Di, 03. Sep 2013 9:51

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: 13588
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh » Di, 03. Sep 2013 11:46

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: 2258
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Wolfgang Ciriack » Di, 03. Sep 2013 12:11

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: 10364
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR » Di, 03. Sep 2013 21:16

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: 413
Registriert: Mo, 30. Mai 2011 15:06

Re: Excel während COM-Eintrag sperren

Beitrag von Benz » Mi, 04. Sep 2013 10:35

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: 2258
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Wolfgang Ciriack » Mi, 04. Sep 2013 11:06

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: 13588
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh » Mi, 04. Sep 2013 11:24

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: 1922
Registriert: Fr, 23. Dez 2005 9:00
Wohnort: Aalen
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von Koverhage » Mi, 04. Sep 2013 12:59

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: 10364
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR » Do, 05. Sep 2013 2:14

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: 413
Registriert: Mo, 30. Mai 2011 15:06

Re: Excel während COM-Eintrag sperren

Beitrag von Benz » Di, 15. Okt 2013 10:03

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

Danke!!!

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10364
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR » Di, 15. Okt 2013 16:22

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: 13588
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim
Kontaktdaten:

Re: Excel während COM-Eintrag sperren

Beitrag von brandelh » Mi, 16. Okt 2013 7:53

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: 10364
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitrag von AUGE_OHR » Mi, 16. Okt 2013 21:59

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast