Deutsch
Forum

Exceldaten über ocx kopieren

 

Christof
Neuß
Hallo,

brauche mal wieder einen Anschubser. Es geht darum, dass ich einen Bereich aus einer Exceldatei in eine andere Exceldatei kopieren möchte. Eigentlich ganz einfach, aber...

Ich habs mal so probiert, aber schon beim "Select" springt mir das Ding raus.
Oh, äähh... die hier sind natürlich oben angegeben, sonst gehts ja gar nicht.
 $H Windows.ph
 $H ocx3a.ph
 $I ocx3a.inc

Proc DatenKopieren

    Excel öffnen
    ocxInit()
    VAR Datei1$   =$ProgDir+"GGBVSDialog.xls"
    VAR Datei2$   =$ProgDir+"GGBVSDialog_Auswertung.xlsx"
    VAR Excel&    =ocxCreate("Excel.Application")
    VAR Workbooks&=ocxGet(Excel&,"Workbooks")
    Exceldatei der Bank öffnen GGBVSDialog.xls
    VAR NewBook1&=ocxMethod(Workbooks&,"Open",Datei1$)
    VAR Sheet1&=ocxGet(NewBook1&,"Sheets","BankDaten")
    VAR Range1&=ocxGet(Sheet1&,"Range","B6:F100")
    Exceldatei der GGB öffnen GGBVSDialog_Auswertung.xlsx
    VAR NewBook2&=ocxMethod(Workbooks&,"Open",Datei2$)
    VAR Sheet2&=ocxGet(NewBook2&,"Sheets","BankDaten")
    VAR Range2&=ocxGet(Sheet1&,"Range","B6")
    BankDaten kopieren
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Sheet1&,"Select","B6:F100")
    Die Messagebox sollte nur anzeigen, ob der Select-Befehl funktioniert hat,
    also nicht mit Fehlermeldung dort rausgesprungen ist. Soweit kommt das Ding
    aber gar nicht.
    MessageBox("Select gelaufen","Meldung",0)
    ocxMethod(Sheet1&,"Copy")
    ocxMethod(Sheet2&,"Select","B6")
    ocxMethod(Sheet2&,"PasteSpecial",)
    Exceldateien und Excel schließen
    ocxPut(NewBook1&,"Saved",1)
    ocxMethod(NewBook1&,"Close")
    ocxMethod(NewBook1&,"Save")
    ocxPut(NewBook2&,"Saved",1)
    ocxMethod(NewBook1&,"Close")
    ocxMethod(Excel&,"Quit")
    ocxRelease(Range1&,Sheet1&,NewBook1&)
    ocxRelease(Range2&,Sheet2&,NewBook2&)
    ocxRelease(WorkBooks&,Excel&)
    ocxDeInit()

endproc


Oh, die Sheets sind in beiden Dateien gleich aufgebaut. Auf Formatierungen etc. braucht man also keine Rücksicht nehmen. Mit der ersten Datei werden die Daten beim Kunden abgeholt, in der zweiten sind zusätzlich die Auswertungsblätter.

Danke
 
Win10 16 GB RAM
14.04.2010  
 




=== SORRY!!!! ===
Hatte den Beitrag irgendwie unter Includes erstellt. Kriege ich da auch nicht mehr weg, oder?
Deshalb hier noch mal.


Kein Problem, demnächst kann man seine Themen auch beliebig verschieben, ich glaube "Löschen" hättest Du den Beitrag unter Includes jedoch können. (andernfalls muss ich nochmal ran) Habe dortigen Beitrag einfach "entfernt". ^^

Zum Code kann ich wenig sagen, naja, ich sehe "unbekannte" Escapesequenzen. ^^
 
14.04.2010  
 




Christof
Neuß
Da bin ich noch mal.

Thema erledigt. Ich habs durch probieren lösen können. Manchmal hilft einfach eine Pause. Danach gehts besser. Den Thread hier setzt doch jemand auf "erledigt", oder muss/kann ich das irgendwo machen?

Ach ja, Eines interessiert mich schon noch. Bekommt das XProfan-Programm eigentlich eine Rückmeldung von den abgesetzten ocx-Befehlen und arbeitet erst dann weiter oder werden die einfach in die Queue geschmissen? Hintergrund der Frage: Muss ich ein "Sleep" einbauen, wenn ich z.B. eine große Exceldatei mit "Save" speichern lasse und das einige Zeit dauert oder kann ich mir das sparen?

Wens interessiert, hier ist der Code:
KompilierenMarkierenSeparieren
Proc DatenKopieren

    Excel öffnen
    ocxInit()
    VAR Datei1$   =$ProgDir+"GGBVSDialog.xls"
    VAR Datei2$   =$ProgDir+"GGBVSDialog_Auswertung.xlsx"
    VAR Excel&    =ocxCreate("Excel.Application")
    ocxPut(Excel&,"DisplayAlerts",0)
    VAR Workbooks&=ocxGet(Excel&,"Workbooks")
    Exceldatei der Bank öffnen GGBVSDialog.xls
    VAR NewBook1&=ocxMethod(Workbooks&,"Open",Datei1$)
    VAR Sheet1&=ocxGet(NewBook1&,"Sheets","BankDaten")
    VAR Range1&=ocxGet(Sheet1&,"Range","B6:F100")
    Exceldatei der GGB öffnen GGBVSDialog_Auswertung.xlsx
    VAR NewBook2&=ocxMethod(Workbooks&,"Open",Datei2$)
    VAR Sheet2&=ocxGet(NewBook2&,"Sheets","BankDaten")
    VAR Range2&=ocxGet(Sheet2&,"Range","B6")
    SetText Elemente&[3], GetText$(Elemente&[3])+"
    Exceldateien wurden geöffnet..."
    BankDaten kopieren
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"
    Bankdaten wurden kopiert..."
    KAP_Fiku kopieren
    Sheet1&=ocxGet(NewBook1&,"Sheets","KAP_Fiku")
    Range1&=ocxGet(Sheet1&,"Range","A1:AA1000")
    Sheet2&=ocxGet(NewBook2&,"Sheets","KAP_Fiku")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"
    FIKU-Daten wurden kopiert..."
    KAP_Priku kopieren
    Sheet1&=ocxGet(NewBook1&,"Sheets","KAP_Priku")
    Range1&=ocxGet(Sheet1&,"Range","A1:AA1000")
    Sheet2&=ocxGet(NewBook2&,"Sheets","KAP_Priku")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"
    PRIKU-Daten wurden kopiert..."
    KAP_betreut kopieren
    Sheet1&=ocxGet(NewBook1&,"Sheets","KAP_betreut")
    Range1&=ocxGet(Sheet1&,"Range","A1:AA1000")
    Sheet2&=ocxGet(NewBook2&,"Sheets","KAP_betreut")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"
    KAP-Daten Betreuer/Berater wurden kopiert..."
    Exceldateien und Excel schließen
    ocxPut(NewBook1&,"Saved",1)
    ocxMethod(NewBook1&,"Close")
    Sheet2&=ocxGet(NewBook2&,"Sheets","Inhalt")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(NewBook2&,"Save")
    ocxPut(NewBook2&,"Saved",1)
    ocxMethod(NewBook2&,"Close")
    ocxMethod(Excel&,"Quit")
    ocxRelease(Range1&,Sheet1&,NewBook1&)
    ocxRelease(Range2&,Sheet2&,NewBook2&)
    ocxRelease(WorkBooks&,Excel&)
    ocxDeInit()
    SetText Elemente&[3], GetText$(Elemente&[3])+"
    Exceldateien gespeichert und Excel beendet..."

endproc


Danke.
 
Win10 16 GB RAM
16.04.2010  
 



Zum OCX-Thema weiß ich nicht, ob es da ein "Ready-" oder "Busy-State" gibt. Um Thema als erledigt zu markieren, einfach links oben auf den Button "Thema: ..." klicken und [X] Aktiv-Häkchen entfernen und speichern. ^^
 
16.04.2010  
 




Uwe
''Pascal''
Niemeier
Hallo Christof!


Bekommt das XProfan-Programm eigentlich eine Rückmeldung von den abgesetzten ocx-Befehlen und arbeitet erst dann weiter oder werden die einfach in die Queue geschmissen? Hintergrund der Frage: Muss ich ein "Sleep" einbauen, wenn ich z.B. eine große Exceldatei mit "Save" speichern lasse und das einige Zeit dauert oder kann ich mir das sparen?


Das kommt auf die Funktion an.
Nach meiner Erfahrung arbeiten die meisten Methoden asynchron, d.h. das Hauptprogramm läuft weiter, während die Funktion noch arbeitet.
Das kann beim Speichern von großen und/oder mehreren Dateien zu Problemen führen.
Darum gibt es wie iF schon sagte oft eine State- oder Busy-Abfrage.

Ein möglicher Workaround wäre, nach Absetzen des Schreibbefehles in einer Schleife die Größe der Datei zu überprüfen; bekommt man während des Schreibvorganges keinen Zugriff (FileSize= -1; Fehlermeldungen ausschalten), ist die Datei noch nicht fertig.
Wenn man die Sollgröße der Datei kennt, kann man nach dem Schreiben auch prüfen, ob die Datei vollständig ist und gegebenenfalls den Vorgang wiederholen.

Wie gesagt, das hängt vom verwendeten ActiveX-Objekt (Excel, HTML, Zip, db usw.) ab.
Im Zweifelsfall also ausprobieren!

HTH
Pascal
 
18.04.2010  
 




Christof
Neuß
Hallo Pascal,

danke für die Hinweise. Sind hilfreich. Das mit der FileSize muss ich mal ausprobieren. Bis jetzt hatte ich ein Sleep eingebaut, aber da die Dateien unterschiedlich groß sind und/oder das System auch mal schneller und mal langsamer ist, verschenkt man Zeit oder man ist doch nicht sicher, dass alles gespeichert ist.
 
Win10 16 GB RAM
23.04.2010  
 



Hallo Christof,

ich bekomme bei der Zeile
VAR NewBook1&=ocxMethod(Workbooks&,"Open",Datei1$)
stets eine Fehlermeldung CallMethod Fehler $-7FF5FC14-2146827284 unbekannter Fehler

Und danach stürtzt das Programm ab...

Umgebung: WIN7, XPROFAN12ß14, gilt aber auch für XPROFAN11.2
 
30.09.2010  
 



Ist natürlich schade, dass die in Codes angegebenen Excel-Dateien nicht hochgeladen wurden z.B. mit Demodaten. @Gast: Kannst Du bitte einen kompletten Code mit dazugehöriger Excel-Datei hochladen sodass der Absturz einfacher nachvollziebar ist?
 
30.09.2010  
 




Stephan
Sonneborn
Hi David,

ich wars... Ich hatte vergessen, mich anzumelden und dann war der Post auch schon drin...

Also, der Quellcode ist der, den Christof gepostet hat. Bis auf die Daten. das sind 2 eigene Test-Dateien gleichen Inhalts.


KompilierenMarkierenSeparieren
 $H Windows.ph
 $H ocx3a.ph
 $I ocx3a.inc

Proc DatenKopieren

    'Excel öffnen
    ocxInit()
    VAR Datei1$   =$ProgDir+"Test.xls"
    VAR Datei2$   =$ProgDir+"test2.xls"
    VAR Excel&    =ocxCreate("Excel.Application")
    ocxPut(Excel&,"DisplayAlerts",0)
    VAR Workbooks&=ocxGet(Excel&,"Workbooks")
    'Exceldatei der Bank öffnen GGBVSDialog.xls
    VAR NewBook1&=ocxMethod(Workbooks&,"Open",Datei1$)
    VAR Sheet1&=ocxGet(NewBook1&,"Sheets","BankDaten")
    VAR Range1&=ocxGet(Sheet1&,"Range","B6:F100")
    'Exceldatei der GGB öffnen GGBVSDialog_Auswertung.xlsx
    VAR NewBook2&=ocxMethod(Workbooks&,"Open",Datei2$)
    VAR Sheet2&=ocxGet(NewBook2&,"Sheets","BankDaten")
    VAR Range2&=ocxGet(Sheet2&,"Range","B6")
    SetText Elemente&[3], GetText$(Elemente&[3])+"Exceldateien wurden geöffnet..."
    'BankDaten kopieren
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"Bankdaten wurden kopiert..."
    'KAP_Fiku kopieren
    Sheet1&=ocxGet(NewBook1&,"Sheets","KAP_Fiku")
    Range1&=ocxGet(Sheet1&,"Range","A1:AA1000")
    Sheet2&=ocxGet(NewBook2&,"Sheets","KAP_Fiku")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"FIKU-Daten wurden kopiert..."
    'KAP_Priku kopieren
    Sheet1&=ocxGet(NewBook1&,"Sheets","KAP_Priku")
    Range1&=ocxGet(Sheet1&,"Range","A1:AA1000")
    Sheet2&=ocxGet(NewBook2&,"Sheets","KAP_Priku")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"PRIKU-Daten wurden kopiert..."
    'KAP_betreut kopieren
    Sheet1&=ocxGet(NewBook1&,"Sheets","KAP_betreut")
    Range1&=ocxGet(Sheet1&,"Range","A1:AA1000")
    Sheet2&=ocxGet(NewBook2&,"Sheets","KAP_betreut")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet1&,"Activate")
    ocxMethod(Range1&,"Copy")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(Range2&,"PasteSpecial",)
    SetText Elemente&[3], GetText$(Elemente&[3])+"KAP-Daten Betreuer/Berater wurden kopiert..."
    'Exceldateien und Excel schließen
    ocxPut(NewBook1&,"Saved",1)
    ocxMethod(NewBook1&,"Close")
    Sheet2&=ocxGet(NewBook2&,"Sheets","Inhalt")
    Range2&=ocxGet(Sheet2&,"Range","A1")
    ocxMethod(Sheet2&,"Activate")
    ocxMethod(NewBook2&,"Save")
    ocxPut(NewBook2&,"Saved",1)
    ocxMethod(NewBook2&,"Close")
    ocxMethod(Excel&,"Quit")
    ocxRelease(Range1&,Sheet1&,NewBook1&)
    ocxRelease(Range2&,Sheet2&,NewBook2&)
    ocxRelease(WorkBooks&,Excel&)
    ocxDeInit()
    SetText Elemente&[3], GetText$(Elemente&[3])+"Exceldateien gespeichert und Excel beendet..."

endproc

cls
datenkopieren
waitinput
end


BTW: Wie kann man eigentlich Code als solchen kennzeichnen? Irgendwie komme ich mit der neuen Umgebung hier nicht wirklich klar. Auch das zitieren klappt nicht...

14 kB
Kurzbeschreibung: Testdaten
Hochgeladen:01.10.2010
Ladeanzahl156
Herunterladen
14 kB
Kurzbeschreibung: Testdaten
Hochgeladen:01.10.2010
Ladeanzahl190
Herunterladen
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
01.10.2010  
 




Jörg
Sellmeyer
Einfach den Code in [ code] hier der Code [ /code ] "einwickeln". Natürlich ohne die Leerzeichen.
Und das Zitieren scheint tatsächlich nicht zu funktionieren.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.10.2010  
 



[offtopic]Ich habe noch keine Toolbar für die Beitragseditoren hergestellt (wird natürlich nachgeholt), darum steht man zur Zeit bisl doof da ahahahber ich habe es mal gepackt ne Seite herzustellen wo auch alle Kommandos gelistet werden können [...]  .[/offtopic]
 
02.10.2010  
 




Uwe
''Pascal''
Niemeier
Hi Stephan!

Sollte eigendlich klappen...
Bist du sicher, daß die Dateien wirklich gefunden werden? Trag doch mal zu Testzwecken die Pfade direkt in den Code ein.
$ProgDir liefert ja den Pfad zum Ordner mit Interpreter oder Runtime, nicht zu dem Ordner, in dem der Code liegt.

SeeYou
Pascal
 
02.10.2010  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

29.331 Betrachtungen

Unbenanntvor 0 min.
Langer02.04.2017
Uwe Lang22.07.2016
RudiB.19.11.2015
Klaus Ernst03.03.2015
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie