Für mein Projekt JooWI Online exportiere ich von Zeit zu Zeit die Elemente aus meiner Projektverwaltungssoftware eGroupWare (Anzeige) als CSV-Datei. Diese beinhaltet jedoch sehr viele Daten, welche ich zur späteren Verwendung auf der Homepage nicht benötige.
Grundsätzlich sind mir die Spalten Titel, Verantwortlicher, Datum und Status wichtig.
Nachdem ich die entsprechende Ansicht in eGroupWare exportiert habe, importiere ich die Datei in LibreOffice Calc mit den entsprechenden Einstellungen.
Da ich bereits Erfahrung mit Excel Makros (VBA) habe, hätte ich nicht gedacht, dass mir StarBasic so schwer fällt. Leider gibt es auch nicht annähernd so viele Google Ergebnisse zu eventuellen Themen/Problemen.
Aber soweit funktionieren die Sachen, welche ich benötige.
LibreOffice Makros beginnen ähnlich VBA mit SUB sowie den Namen des Makros. Em Ende muss Sub auch wieder geschlossen werden.
REM ***** BASIC *****
Sub ModifyDataInProject
...
End Sub
Alle Teile ab hier müssen sich innerhalb der SUB-Funktion befinden!
Im ersten Teil entferne ich schlichtweg nicht benötigte Spalten:
osheet = thisComponent.sheets("Tabelle1")
ocursor = osheet.createCursor
ocursor.gotoendofusedarea(false)
nEndRow = ocursor.rangeaddress.EndRow
columns = osheet.getColumns
rows = osheet.getRows
' remove not required columns
columns.removeByIndex(0, 2)
columns.removeByIndex(1, 6)
columns.removeByIndex(4, 2)
columns.removeByIndex(5, 10)
Anschließend gehts an die nicht benötigten Zeilen:
' remove not required rows
' NOTE count i only if no row was removed
rows.removeByIndex(0, 2)
i = 0
while osheet.getcellbyposition(0,i).string <> ""
if InStr(osheet.getcellbyposition(2,i).string,"timesheet") = 1 then
rows.removeByIndex(i, 1)
else
i = i+1
endif
wend
' remove not required columns
columns.removeByIndex(2, 1)
' remove time from date column
i = 0
while osheet.getcellbyposition(0,i).string <> ""
if osheet.getcellbyposition(3,i).string = "100%" then
osheet.getcellbyposition(2,i).string = left(osheet.getcellbyposition(2,i).string, 10)
else
osheet.getcellbyposition(2,i).string = ""
end if
i = i+1
wend
Kurze Beschreibung:
- Als erstes werden die ersten beiden Zeilen gelöscht.
- Anschließend läuft eine WHILE Schleife alle verfügbaren Zeilen durch (bis Spalte A einma leer ist)
- Hier wird dann abgefragt, ob der Wert der 3. Spalte "timesheet" entspricht. Diese wird gelöscht, ansonsten wird einfach weitergemacht.
- Dann wird die Hilfsspalte wo "timesheet" drin stand, bzw. der Typ des Elements, gelöscht
- Nun läuft erneut die gleiche WHILE Schleife, in welcher das Datumfeld modifiziert wird, sofern die Status-Spalte 100% entspricht. Ansonsten trägt das Script nichts in die Spalte. Das Datum wurde inkl. Zeit exportiert, welche ich jedoch nicht möchte.
Am Ende ersetze ich noch die IDs der Verantwortlichen (werden leider nur als ID Exportiert) durch die realen Namen. (IDs wurden geändert)
' insert names instead of integers
i = 0
while osheet.getcellbyposition(0,i).string <> ""
select case osheet.getcellbyposition(1,i).string
case "4", "4, -8", "-8, 4"
osheet.getcellbyposition(1,i).string = "Roland Meier"
case "7", "7, -8", "-8, 7"
osheet.getcellbyposition(1,i).string = "Norbert Schad"
case "4, 7", "7, 4", "-8, 7, 4", "-8, 4, 7", "4, -8, 7", "4, 7, -8", "7, 4, -8", "7, -7, 4"
osheet.getcellbyposition(1,i).string = "Roland Meier,"&Chr(13)&"Norbert Schad"
end select
i = i+1
wend
Vielleicht ist ja die ein oder andere Zeile für jemanden ganz hilfreich.