von evemaria » Sa, 12.06.2010 17:58
Hallo Zusammen
Dank euch habe ich nun erreicht, was mir vorschwebte!
Ich bin zwar absolute Anfängerin, aber als Abschluss stelle ich den Code trotzdem mal ganz frech hier hin, im Wissen, dass er nicht perfekt ist und man das sicher noch viel eleganter lösen könnte.
Ich war froh über verschiedene Code-Schnipsel, die ich hier im Forum und im Netz verstreut gefunden habe, vielleicht kann ja jemand mal was mit meinem Zeugs anfangen.
Zusätzlich habe ich einen Dialog ("projektauswahlkopfzeile") mit dem Dialogeditor erstellt mit den Buttons "Neues Projekt" (als Ereignis "neuesprojekt" zugeordnet), "Projekt löschen" (als Ereignis "projektweg" zugeordnet), "Abbrechen" (als Ereignis "abbrechen" zugeordnet) und "OK"(als Ereignis "kopfzeileerstellen" zugeordnet). Dem Dialog wurde noch eine Listbox mit dem Namen "projektliste" hinzugefügt.
An einem zentralen Ort für alle Nutzer verfügbar, aber trotzdem niemandem im Wege habe ich eine Liste mit den aktuellen Projekten aus dem OOWriter unter "txt-kodiert" abgespeichert und anschliessend die Endung .txt durch .ini ersetzt.
In OOCalc habe ich einen eigenen Menüpunkt hinzugefügt und mit dem Makro "kopfzeilendialog" verbunden.
Für ein nächste Aufgabe würde ich sicher versuchen, die Variablen geschickter/klarer zu benennen.
Einen ganz speziellen Dank an Jürgen/turtle47 - ohne sein Beispiel hätte ich sicher noch viel, viel länger vor dieser Aufgabe gesessen!
Gruss, eve
Code: Alles auswählen
' dialog das ganze modul definieren, damit in den einzelnen makros klar ist worum das es geht
Private kopfDialog
Sub kopfdialogdefinieren
kopfDialog = LoadDialog( "Standard" , "projektauswahlkopfzeile" )
End Sub
' dialog kopfzeile starten und listbox befüllen aus ini-datei
Sub kopfzeilendialog
Dim import As Integer
Dim zeilevorher As String
Dim inidatei As String
Dim kopflistbox as Object
DialogLibraries.LoadLibrary( "Standard" )
kopfDialog = CreateUnoDialog( DialogLibraries.Standard.projektauswahlkopfzeile )
'dieser teil holt zeilen aus der für alle benutzer freigegebenen ini-datei
inidatei = "pfad/datei.ini"
import = Freefile
Open inidatei For Input As import
While not eof(import)
Line Input #import, zeilevorher
If zeilevorher <>"" then
TXT_Items = TXT_Items & zeilevorher & ";"
textvorher = Split(TXT_Items,";")
end if
wend
Close #import
'dieser teil füllt die listbox
kopflistbox = kopfDialog.getControl("projektliste")
kopflistbox.additems(textvorher(),0)
kopfDialog.Execute()
end sub
'inputbox für neues projekt starten und projekt zuoberst in die bestehende liste eintragen
Private bauvorhaben
sub neuesprojekt
bauvorhaben = InputBox("neues Projekt hinzufügen:",, "b a u v o r h a b e n")
Dim nCount As Integer
kopfDialogModel = kopfDialog.getModel()
kopflistbox = kopfDialog.getControl("projektliste")
nCount = 0
kopflistbox.addItem( bauvorhaben, nCount )
end sub
'löscht das in der liste ausgewählte projekt
sub projektweg
Dim nPos As Integer
Dim nCount As Integer
Dim sSelectedItem As String
kopfDialogModel = kopfDialog.getModel()
kopflistbox = kopfDialog.getControl("projektliste")
position = kopflistbox.getSelectedItemPos()
nPos = position
nCount = 1
kopflistbox.removeItems( nPos, nCount)
end sub
'dialogkopfzeile abbrechen-button schliesst einfach nur das dialogfeld
Sub abbrechen
kopfDialogModel = kopfDialog.getModel()
kopfDialog.endexecute()
End Sub
'dialogkopfzeile ok--button
sub kopfzeileerstellen
'variablen setzen
Dim document As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Dim sheet As Object
Dim HText As Object
Dim HContent As Object
Dim projekt As String
Dim datei as Object
Dim seitenzahl as Object
Dim seitentotal as Object
Dim ordner as String
document = StarDesktop.CurrentComponent
StyleFamilies = document.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
sheet = ThisComponent.CurrentController.ActiveSheet
DefPage = PageStyles.getByName(sheet.PageStyle)
datei = document.createInstance("com.sun.star.text.TextField.FileName")
datei.setPropertyValue("FileFormat",1)
seitenzahl = document.createInstance("com.sun.star.text.TextField.PageNumber")
seitentotal = document.createInstance("com.sun.star.text.TextField.PageCount")
kopfDialogModel = kopfDialog.getModel()
kopflistbox = kopfDialog.getControl("projektliste")
projekt = kopflistbox.SelectedItem
'ordnerabfrage
ordner = InputBox("in welchem ordner befindet sich die datei?",, "offerten")
'kopfzeile aufschalten und definieren
DefPage.HeaderIsOn = True
DefPage.HeaderIsShared = True
HContent = DefPage.RightPageHeaderContent
'links
kopflinksText = HContent.LeftText
oCursor = kopflinksText.createTextCursor()
kopflinksText.String = "k / "
oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
oCursor.setPropertyValue("CharHeight", 7)
oCursor.setPropertyValue("CharWeight", 70)
kopflinksText.insertString(oCursor, projekt , FALSE)
kopflinksText.insertString(oCursor," / "& ordner & " / ", FALSE)
'dateiname anhängen
kopflinksText.insertTextContent(oCursor, datei , FALSE)
kopflinksText.insertString(oCursor, Chr(13) & Chr(13) & Chr(13) & Chr(13) & Chr(13), FALSE)
'mittle leer
kopfmitteText = HContent.CenterText
kopfmitteText.String = ""
'rechts
kopfrechtsText = HContent.RightText
oCursor = kopfrechtsText.createTextCursor()
kopfrechtsText.String = "Vorname name"
oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
oCursor.setPropertyValue("CharHeight", 7)
oCursor.setPropertyValue("CharWeight", 90)
oCursor = kopfrechtsText.createTextCursor()
kopfrechtsText.insertString(oCursor,Chr(13),FALSE)
oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
oCursor.setPropertyValue("CharHeight", 7)
oCursor.setPropertyValue("CharWeight", 70)
kopfrechtsText.insertString(oCursor,"adresse" & Chr(13) & "ort" & Chr(13) & "tel" & Chr(13) & Chr(13),FALSE)
'seitenzahlen anfügen
kopfrechtsText.insertTextContent(oCursor, seitenzahl , FALSE)
kopfrechtsText.insertString(oCursor,"/", FALSE)
kopfrechtsText.insertTextContent(oCursor, seitentotal , FALSE)
DefPage.RightPageHeaderContent = HContent
'fusszeile ausschalten
DefPage.FooterIsOn = False
'daten aus listbox nach ini-datei zurückschreiben für nächstes mal
Dim export As Integer
Dim inidatei As String
CtrlCount = kopflistbox.ItemCount
for i = 0 To CtrlCount -1
CtrlIntems = CtrlIntems & kopflistbox.Items(i)& CHR(13)
next i
inidatei = "pfad/datei.ini"
export = Freefile
Open inidatei For output As #export
Print #export, CtrlIntems
Close #export
'dialog schliessen
kopfDialog.endexecute()
end sub
Hallo Zusammen
Dank euch habe ich nun erreicht, was mir vorschwebte!
Ich bin zwar absolute Anfängerin, aber als Abschluss stelle ich den Code trotzdem mal ganz frech hier hin, im Wissen, dass er nicht perfekt ist und man das sicher noch viel eleganter lösen könnte.
Ich war froh über verschiedene Code-Schnipsel, die ich hier im Forum und im Netz verstreut gefunden habe, vielleicht kann ja jemand mal was mit meinem Zeugs anfangen.
Zusätzlich habe ich einen Dialog ("projektauswahlkopfzeile") mit dem Dialogeditor erstellt mit den Buttons "Neues Projekt" (als Ereignis "neuesprojekt" zugeordnet), "Projekt löschen" (als Ereignis "projektweg" zugeordnet), "Abbrechen" (als Ereignis "abbrechen" zugeordnet) und "OK"(als Ereignis "kopfzeileerstellen" zugeordnet). Dem Dialog wurde noch eine Listbox mit dem Namen "projektliste" hinzugefügt.
An einem zentralen Ort für alle Nutzer verfügbar, aber trotzdem niemandem im Wege habe ich eine Liste mit den aktuellen Projekten aus dem OOWriter unter "txt-kodiert" abgespeichert und anschliessend die Endung .txt durch .ini ersetzt.
In OOCalc habe ich einen eigenen Menüpunkt hinzugefügt und mit dem Makro "kopfzeilendialog" verbunden.
Für ein nächste Aufgabe würde ich sicher versuchen, die Variablen geschickter/klarer zu benennen.
Einen ganz speziellen Dank an Jürgen/turtle47 - ohne sein Beispiel hätte ich sicher noch viel, viel länger vor dieser Aufgabe gesessen!
Gruss, eve
[code]' dialog das ganze modul definieren, damit in den einzelnen makros klar ist worum das es geht
Private kopfDialog
Sub kopfdialogdefinieren
kopfDialog = LoadDialog( "Standard" , "projektauswahlkopfzeile" )
End Sub
' dialog kopfzeile starten und listbox befüllen aus ini-datei
Sub kopfzeilendialog
Dim import As Integer
Dim zeilevorher As String
Dim inidatei As String
Dim kopflistbox as Object
DialogLibraries.LoadLibrary( "Standard" )
kopfDialog = CreateUnoDialog( DialogLibraries.Standard.projektauswahlkopfzeile )
'dieser teil holt zeilen aus der für alle benutzer freigegebenen ini-datei
inidatei = "pfad/datei.ini"
import = Freefile
Open inidatei For Input As import
While not eof(import)
Line Input #import, zeilevorher
If zeilevorher <>"" then
TXT_Items = TXT_Items & zeilevorher & ";"
textvorher = Split(TXT_Items,";")
end if
wend
Close #import
'dieser teil füllt die listbox
kopflistbox = kopfDialog.getControl("projektliste")
kopflistbox.additems(textvorher(),0)
kopfDialog.Execute()
end sub
'inputbox für neues projekt starten und projekt zuoberst in die bestehende liste eintragen
Private bauvorhaben
sub neuesprojekt
bauvorhaben = InputBox("neues Projekt hinzufügen:",, "b a u v o r h a b e n")
Dim nCount As Integer
kopfDialogModel = kopfDialog.getModel()
kopflistbox = kopfDialog.getControl("projektliste")
nCount = 0
kopflistbox.addItem( bauvorhaben, nCount )
end sub
'löscht das in der liste ausgewählte projekt
sub projektweg
Dim nPos As Integer
Dim nCount As Integer
Dim sSelectedItem As String
kopfDialogModel = kopfDialog.getModel()
kopflistbox = kopfDialog.getControl("projektliste")
position = kopflistbox.getSelectedItemPos()
nPos = position
nCount = 1
kopflistbox.removeItems( nPos, nCount)
end sub
'dialogkopfzeile abbrechen-button schliesst einfach nur das dialogfeld
Sub abbrechen
kopfDialogModel = kopfDialog.getModel()
kopfDialog.endexecute()
End Sub
'dialogkopfzeile ok--button
sub kopfzeileerstellen
'variablen setzen
Dim document As Object
Dim StyleFamilies As Object
Dim PageStyles As Object
Dim DefPage As Object
Dim sheet As Object
Dim HText As Object
Dim HContent As Object
Dim projekt As String
Dim datei as Object
Dim seitenzahl as Object
Dim seitentotal as Object
Dim ordner as String
document = StarDesktop.CurrentComponent
StyleFamilies = document.StyleFamilies
PageStyles = StyleFamilies.getByName("PageStyles")
sheet = ThisComponent.CurrentController.ActiveSheet
DefPage = PageStyles.getByName(sheet.PageStyle)
datei = document.createInstance("com.sun.star.text.TextField.FileName")
datei.setPropertyValue("FileFormat",1)
seitenzahl = document.createInstance("com.sun.star.text.TextField.PageNumber")
seitentotal = document.createInstance("com.sun.star.text.TextField.PageCount")
kopfDialogModel = kopfDialog.getModel()
kopflistbox = kopfDialog.getControl("projektliste")
projekt = kopflistbox.SelectedItem
'ordnerabfrage
ordner = InputBox("in welchem ordner befindet sich die datei?",, "offerten")
'kopfzeile aufschalten und definieren
DefPage.HeaderIsOn = True
DefPage.HeaderIsShared = True
HContent = DefPage.RightPageHeaderContent
'links
kopflinksText = HContent.LeftText
oCursor = kopflinksText.createTextCursor()
kopflinksText.String = "k / "
oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
oCursor.setPropertyValue("CharHeight", 7)
oCursor.setPropertyValue("CharWeight", 70)
kopflinksText.insertString(oCursor, projekt , FALSE)
kopflinksText.insertString(oCursor," / "& ordner & " / ", FALSE)
'dateiname anhängen
kopflinksText.insertTextContent(oCursor, datei , FALSE)
kopflinksText.insertString(oCursor, Chr(13) & Chr(13) & Chr(13) & Chr(13) & Chr(13), FALSE)
'mittle leer
kopfmitteText = HContent.CenterText
kopfmitteText.String = ""
'rechts
kopfrechtsText = HContent.RightText
oCursor = kopfrechtsText.createTextCursor()
kopfrechtsText.String = "Vorname name"
oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
oCursor.setPropertyValue("CharHeight", 7)
oCursor.setPropertyValue("CharWeight", 90)
oCursor = kopfrechtsText.createTextCursor()
kopfrechtsText.insertString(oCursor,Chr(13),FALSE)
oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
oCursor.setPropertyValue("CharHeight", 7)
oCursor.setPropertyValue("CharWeight", 70)
kopfrechtsText.insertString(oCursor,"adresse" & Chr(13) & "ort" & Chr(13) & "tel" & Chr(13) & Chr(13),FALSE)
'seitenzahlen anfügen
kopfrechtsText.insertTextContent(oCursor, seitenzahl , FALSE)
kopfrechtsText.insertString(oCursor,"/", FALSE)
kopfrechtsText.insertTextContent(oCursor, seitentotal , FALSE)
DefPage.RightPageHeaderContent = HContent
'fusszeile ausschalten
DefPage.FooterIsOn = False
'daten aus listbox nach ini-datei zurückschreiben für nächstes mal
Dim export As Integer
Dim inidatei As String
CtrlCount = kopflistbox.ItemCount
for i = 0 To CtrlCount -1
CtrlIntems = CtrlIntems & kopflistbox.Items(i)& CHR(13)
next i
inidatei = "pfad/datei.ini"
export = Freefile
Open inidatei For output As #export
Print #export, CtrlIntems
Close #export
'dialog schliessen
kopfDialog.endexecute()
end sub[/code]