Excel während COM-Eintrag sperren

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Excel während COM-Eintrag sperren

Beitragvon Benz » Di, 03. Sep 2013 8: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) 3027-mal betrachtet
Benz
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 413
Registriert: Mo, 30. Mai 2011 14:06

Re: Excel während COM-Eintrag sperren

Beitragvon Rolf Ramacher » Di, 03. Sep 2013 8: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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Excel während COM-Eintrag sperren

Beitragvon brandelh » Di, 03. Sep 2013 8: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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13264
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Excel während COM-Eintrag sperren

Beitragvon Benz » Di, 03. Sep 2013 8: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?
Benz
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 413
Registriert: Mo, 30. Mai 2011 14:06

Re: Excel während COM-Eintrag sperren

Beitragvon brandelh » Di, 03. Sep 2013 10: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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13264
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Excel während COM-Eintrag sperren

Beitragvon Wolfgang Ciriack » Di, 03. Sep 2013 11: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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2219
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin

Re: Excel während COM-Eintrag sperren

Beitragvon AUGE_OHR » Di, 03. Sep 2013 20: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/office/jj162978.aspx muss man auswählen welche Produkt man haben will.

z.b. Excel http://msdn.microsoft.com/de-de/library/office/fp179694.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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10140
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitragvon Benz » Mi, 04. Sep 2013 9: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/office/jj162978.aspx muss man auswählen welche Produkt man haben will.

z.b. Excel http://msdn.microsoft.com/de-de/library/office/fp179694.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?
Benz
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 413
Registriert: Mo, 30. Mai 2011 14:06

Re: Excel während COM-Eintrag sperren

Beitragvon Wolfgang Ciriack » Mi, 04. Sep 2013 10: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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2219
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin

Re: Excel während COM-Eintrag sperren

Beitragvon brandelh » Mi, 04. Sep 2013 10: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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13264
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Excel während COM-Eintrag sperren

Beitragvon Koverhage » Mi, 04. Sep 2013 11: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
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1884
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen

Re: Excel während COM-Eintrag sperren

Beitragvon AUGE_OHR » Do, 05. Sep 2013 1: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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10140
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitragvon Benz » Di, 15. Okt 2013 9:03

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

Danke!!!
Benz
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 413
Registriert: Mo, 30. Mai 2011 14:06

Re: Excel während COM-Eintrag sperren

Beitragvon AUGE_OHR » Di, 15. Okt 2013 15: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
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10140
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Excel während COM-Eintrag sperren

Beitragvon brandelh » Mi, 16. Okt 2013 6:53

Alaska hat für Subscriptionskunden einige neue Controls im Quellcode veröffentlicht, darunter auch ein Progressbar.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13264
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Excel während COM-Eintrag sperren

Beitragvon AUGE_OHR » Mi, 16. Okt 2013 20: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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10140
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg


Zurück zu MS Office

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast