Foro | | | | Christof Neuß | Ciao,
brauche mal wieder einen Anschubser. Es geht darum, dass ich einen Bereich aus einer Exceldatei in un 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 naturalmente oben angegeben, sonst gehts ja gar nicht.
$H Windows.ph
$H ocx3a.ph
$I ocx3a.inc
Proc DatenKopieren
Excel öffnen
ocxInit()
VAR File1$ =$ProgDir+"GGBVSDialog.xls"
VAR File2$ =$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",File1$)
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",File2$)
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 Mostra, 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 File gleich aufgebaut. Auf Formatierungen etc. braucht man also keine Rücksicht nehmen. Mit der ersten File werden die Daten beim Kunden abgeholt, in der zweiten sind zusätzlich die Auswertungsblätter.
Danke |
| | | | |
| | |
=== SORRY!!!! === Hatte den Beitrag irgendwie unter Include erstellt. Kriege ich da auch nicht mehr weg, oder? Deshalb hier noch mal.
Kein Problem, demnächst kann man seine Argomenti auch beliebig verschieben, ich glaube "Löschen" hättest Du den Beitrag unter Include 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 grande 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..." lass=s4 href='./../../function-references/xprofan/endproc/'>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 grande 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 corre weiter, während die Funktion noch arbeitet. Das kann beim Speichern von grande und/oder mehreren File 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 Dimensione der File zu überprüfen; bekommt man während des Schreibvorganges keinen Zugriff (FileSize= -1; Fehlermeldungen ausschalten), ist die File noch nicht fertig. Wenn man die Sollgröße der File kennt, kann man nach dem Schreiben auch prüfen, ob die File 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 per die Hinweise. Sind hilfreich. Das mit der FileSize muss ich mal ausprobieren. Bis jetzt hatte ich ein Sleep eingebaut, aber da die File unterschiedlich grande 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",File1$) stets eine Fehlermeldung CallMethod Fehler $-7FF5FC14-2146827284 unbekannter Fehler
Und danach stürtzt das Programm ab...
Umgebung: WIN7, XPROFAN12ß14, gilt aber auch per XPROFAN11.2 |
| | | | |
| | | Ist naturalmente schade, dass die in Codes angegebenen Excel-File nicht hochgeladen wurden z.B. mit Demodaten. @Ospite: Kannst Du bitte einen kompletten Code mit dazugehöriger Excel-File 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-File 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
wa t
end
BTW: Wie kann man eigentlich Code als solchen kennzeichnen? Irgendwie komme ich mit der neuen Umgebung hier nicht wirklich klar. Auch das Citazione 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 Citazione 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 per die Beitragseditoren hergestellt (wird naturalmente 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 File 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 |
| | | | |
|
AnswerTopic-Options | 29.426 Views |
ThemeninformationenDieses Thema hat 7 subscriber: |