von balu » Do, 18.09.2008 10:40
Hallo Leute,
im groben und ganzen haben sich meine Hauptwünsche, dank Jürgens Unterstützung

, erledigt. Das einzige was noch fehlt, ist eine Überprüfung ob das Datum schon in der "Verwaltung" ausgefüllt ist. Das ist aber erst mal nicht so wichtig, kann vielleicht später noch mal ergänzt werden.
Was mich jetzt noch interessieren würde, wenn es nicht so komplex und kompliziert wäre, ist folgendes.
Wie, und wo, müsste der Code ergänzt werden, dass die "Verwaltung" die geöffnete "Eingabe" erst speichert, und dann die Daten ausliest?
Denn nach meinen bisheriegen Wissensstand muss ja erst die "Eingabe" gespeichert werden, bevor die "Verwaltung" auf die aktualisierten Daten zugreifen kann. Das Sahnehäuptchen wäre, wenn die "Eingabe" mit dem eingestellten Datum aus der Zelle K3 gespeichert werden könnte.
Hier ist der Code.
Achtung! Nicht vergessen den Pfad anzupassen!
Code: Alles auswählen
Public oDocSrc1 As Object
Public oDoc as Object
Public oDummy()
Public oDoc As Object
Public mydate as String
Public gefunden as String
Sub Copy_Aeras_2_Sheet_2
on Error goto Ende
GlobalScope.BasicLibraries.LoadLibrary("Tools")
oDoc = thisComponent
oComponents = StarDesktop.getComponents()
myString = ""
gefunden = ""
oUrlSrc = "file:///G:/Testordner/Eingabe.ods" 'Pfad zum Dokument anpassen
'############ Prüfen ob Dokument schon geöffnet, sonst öffnen ##################
dim myFileProp(0) as New com.sun.star.beans.PropertyValue
myFileProp(0).name="Hidden"
myFileProp(0).value= true
oComponentWalker = oComponents.createEnumeration()
Do While oComponentWalker.hasMoreElements()
oComponent = oComponentWalker.nextElement()
if oComponent.getURL() = oUrlSrc then
gefunden = true
end if
Loop
if gefunden = true then
oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_default", 0, myFileProp() )
else
oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
end if
'############### Ende Prüfung #############################
oSheet = oDocSrc1.Sheets().getByName("31_08") 'Tabellenblatt 31_08 ansprechen
oCellSrc = oSheet.getCellRangeByName("K3") 'Zelle holen
myString = oCellSrc.string 'Zellinhalt holen
myDate = Left(myString,5) ' 'Anfang des Datums filtern z.B. 06.09
mySheet = oDoc.Sheets().getByName("Übersicht")' Tabellenblatt Übersicht ansprechen
for i = 0 to 2500 'Spalte A durchlaufen und Datum suchen
mycell = mysheet.getCellByPosition(0,i)
myString = mycell.string
if myString = myDate then 'wenn Datum gefunden
myrow = mycell.CellAddress.Row + 1 'Zeilenindex auslesen > Startzeilen für Schreiben "Verwaltung"
myrow2 = myrow + 5 'Zeilenindex > Endzeilen für Schreiben "Verwaltung"
goto weiter 'weil Datum gefunden Durchsuchen abbrechen und bei "Weiter:" weitermachen
end if
next i
Weiter:
'################ Start Bereiche Lesen ######################
aBereich = array ("C7:D12","G7:H12","K7:L12","C15:D20","C23:D28","C31:D36","G31:H36","K31:L36")
For z = LBound(aBereich()) To UBound(aBereich()) 'Schleife für Array aBereich
myRange = aBereich(z)'
oRange1 = oDocSrc1.Sheets().getByIndex(0).getCellRangeByName(myRange) ' Bereich holen
myHaus()= oRange1.getDataArray()' Bereich lesen
'################ Ende Bereich Lesen ##########################
'################ Start Bereich Schreiben #####################
bZelle = Array ("C","F","I","L","O","R","U","X")'Startspalten für Schreiben "Verwaltung"
cZelle = Array ("D","G","J","M","P","S","V","Y")'Endspalten für Schreiben "Verwaltung"
myCell1 = bZelle(z)'Startspalte aus Array
myCell2 = cZelle(z)'Endspalte aus Array
oRange1 = ThisComponent.Sheets().getByIndex(0).getCellRangeByName(myCell1 & myrow & ":" & myCell2 & myrow2)'Array setzen
oRange1.setDataArray(myHaus())'Array schreiben
next z 'Schleife für Array aufrufen
'################ Ende Bereich Schreiben ################################
msgbox "Die Daten wurden erfolgreich übertragen" , 64, "Daten übertragen"
if gefunden <> true then
oDocSrc1.close (True)
end if
oDoc.currentController.Frame.ContainerWindow.toFront()
exit sub
Ende:
msgbox "Das Datum wurde nicht gefunden!" , 48, "Daten übertragen"
End sub
Gruß
balu
Hallo Leute,
im groben und ganzen haben sich meine Hauptwünsche, dank Jürgens Unterstützung :D , erledigt. Das einzige was noch fehlt, ist eine Überprüfung ob das Datum schon in der "Verwaltung" ausgefüllt ist. Das ist aber erst mal nicht so wichtig, kann vielleicht später noch mal ergänzt werden.
Was mich jetzt noch interessieren würde, wenn es nicht so komplex und kompliziert wäre, ist folgendes.
Wie, und wo, müsste der Code ergänzt werden, dass die "Verwaltung" die geöffnete "Eingabe" erst speichert, und dann die Daten ausliest?
Denn nach meinen bisheriegen Wissensstand muss ja erst die "Eingabe" gespeichert werden, bevor die "Verwaltung" auf die aktualisierten Daten zugreifen kann. Das Sahnehäuptchen wäre, wenn die "Eingabe" mit dem eingestellten Datum aus der Zelle K3 gespeichert werden könnte. :D
Hier ist der Code.
Achtung! Nicht vergessen den Pfad anzupassen!
[code]
Public oDocSrc1 As Object
Public oDoc as Object
Public oDummy()
Public oDoc As Object
Public mydate as String
Public gefunden as String
Sub Copy_Aeras_2_Sheet_2
on Error goto Ende
GlobalScope.BasicLibraries.LoadLibrary("Tools")
oDoc = thisComponent
oComponents = StarDesktop.getComponents()
myString = ""
gefunden = ""
oUrlSrc = "file:///G:/Testordner/Eingabe.ods" 'Pfad zum Dokument anpassen
'############ Prüfen ob Dokument schon geöffnet, sonst öffnen ##################
dim myFileProp(0) as New com.sun.star.beans.PropertyValue
myFileProp(0).name="Hidden"
myFileProp(0).value= true
oComponentWalker = oComponents.createEnumeration()
Do While oComponentWalker.hasMoreElements()
oComponent = oComponentWalker.nextElement()
if oComponent.getURL() = oUrlSrc then
gefunden = true
end if
Loop
if gefunden = true then
oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_default", 0, myFileProp() )
else
oDocSrc1 = StarDesktop.loadComponentFromURL(oUrlSrc, "_blank", 0, myFileProp())
end if
'############### Ende Prüfung #############################
oSheet = oDocSrc1.Sheets().getByName("31_08") 'Tabellenblatt 31_08 ansprechen
oCellSrc = oSheet.getCellRangeByName("K3") 'Zelle holen
myString = oCellSrc.string 'Zellinhalt holen
myDate = Left(myString,5) ' 'Anfang des Datums filtern z.B. 06.09
mySheet = oDoc.Sheets().getByName("Übersicht")' Tabellenblatt Übersicht ansprechen
for i = 0 to 2500 'Spalte A durchlaufen und Datum suchen
mycell = mysheet.getCellByPosition(0,i)
myString = mycell.string
if myString = myDate then 'wenn Datum gefunden
myrow = mycell.CellAddress.Row + 1 'Zeilenindex auslesen > Startzeilen für Schreiben "Verwaltung"
myrow2 = myrow + 5 'Zeilenindex > Endzeilen für Schreiben "Verwaltung"
goto weiter 'weil Datum gefunden Durchsuchen abbrechen und bei "Weiter:" weitermachen
end if
next i
Weiter:
'################ Start Bereiche Lesen ######################
aBereich = array ("C7:D12","G7:H12","K7:L12","C15:D20","C23:D28","C31:D36","G31:H36","K31:L36")
For z = LBound(aBereich()) To UBound(aBereich()) 'Schleife für Array aBereich
myRange = aBereich(z)'
oRange1 = oDocSrc1.Sheets().getByIndex(0).getCellRangeByName(myRange) ' Bereich holen
myHaus()= oRange1.getDataArray()' Bereich lesen
'################ Ende Bereich Lesen ##########################
'################ Start Bereich Schreiben #####################
bZelle = Array ("C","F","I","L","O","R","U","X")'Startspalten für Schreiben "Verwaltung"
cZelle = Array ("D","G","J","M","P","S","V","Y")'Endspalten für Schreiben "Verwaltung"
myCell1 = bZelle(z)'Startspalte aus Array
myCell2 = cZelle(z)'Endspalte aus Array
oRange1 = ThisComponent.Sheets().getByIndex(0).getCellRangeByName(myCell1 & myrow & ":" & myCell2 & myrow2)'Array setzen
oRange1.setDataArray(myHaus())'Array schreiben
next z 'Schleife für Array aufrufen
'################ Ende Bereich Schreiben ################################
msgbox "Die Daten wurden erfolgreich übertragen" , 64, "Daten übertragen"
if gefunden <> true then
oDocSrc1.close (True)
end if
oDoc.currentController.Frame.ContainerWindow.toFront()
exit sub
Ende:
msgbox "Das Datum wurde nicht gefunden!" , 48, "Daten übertragen"
End sub
[/code]
Gruß
balu