Forum | | | | 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 |
| | | | |
| | |
=== 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. ^^ |
| | | | |
| | 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. |
| | | | |
| | | 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. ^^ |
| | | | |
| | 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 |
| | | | |
| | 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. |
| | | | |
| | | 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 |
| | | | |
| | | 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? |
| | | | |
| | 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... |
| | | 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] |
| | | | |
| | 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 |
| | | | |
|
AntwortenThemenoptionen | 29.331 Betrachtungen |
ThemeninformationenDieses Thema hat 7 Teilnehmer: |