Inhaltsverzeichnis

Tabellenkalkulation: Der PC-Konfigurator

Dieses Projekt „Kauf eines PC's“ kann sehr gut mit dem Thema „Arbeiten mit großen Datenmengen“ sowie „Umgang mit Editoren“ kombiniert werden. Ein aktueller PC-Komponenten-Flyer (PDF) wird dazu im Internet gesucht und in eine Textdatei konvertiert. Mithilfe regulärer Ausdrücke wird diese Datei in ein Format umgewandelt, das in OpenOffice-Calc importiert werden kann.

Für dieses Projekt werden Kenntnisse der Makroprogrammierung benötigt!

In diesem Projekt wird ein PC-Konfigurator mit OpenOffice Calc entwickelt.

Das Arbeitsblatt „PC-Konfigurator“ in Aktion.

Beispieltabelle und das dazugehörige Makro

Die Calc-Tabelle

Ein Arbeitsblatt „cpu_board.ods“ befindet sich im Downloadbereich, in dem einige Grundelemente bereits installiert sind.

Basic-makro

Listing 1:Basic-Makro

' Grunddatei fürs CPU-Projekt 
 
sub test 
MsgBox "Hallo Welt"
end sub
 
' cpu-Prozedur zum Erstellen des Konfigurators
' sub cpu 
'Ermittelt die Zeilennummer, in der sich der Cursor befindet.
r = getCurrentRow() 
'Die aktuelle Spaltennummer wird ausgelesen und der Variablen c zugewiesen.'
c = getCurrentCol()  
 
value = readCell( c+1,r )
writeCell(5,2,value) 
strCPU = readString(c,r) 
writeString(4,2,strCPU) 
 
end sub  
 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' utility functions '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
' getCurrentRow
' @returns the current cell position (zero based) 
Function getCurrentRow() as Integer 
oDesktop = createUnoService( "com.sun.star.frame.Desktop" ) 
oController = oDesktop.CurrentFrame.Controller 
oSelection = oController.Selection 
aPos = oSelection.getRangeAddress 
getCurrentRow = aPos.StartRow 
End Function  
 
 
' getCurrentCol 
' @returns the current cell position (zero based)
Function getCurrentCol() as Integer
oDesktop = createUnoService( "com.sun.star.frame.Desktop" )
oController = oDesktop.CurrentFrame.Controller
oSelection = oController.Selection 
aPos = oSelection.getRangeAddress
getCurrentCol = aPos.StartColumn 
End Function 
 
' writeCell writes a number to the table cell.
' @param the zero based xPos table position
' @param the zero based yPos table position
' @param value 
Function writeCell( xPos as Integer, yPos as Integer, value as Double)
Dim myDoc Dim mySheet Dim myCell myDoc   = thisComponent mySheet = myDoc.sheets( 0 ) 
myCell  = mySheet.getCellByPosition( xPos, yPos ) 
myCell.setValue( value )
End Function
 
' overloaded function for string operations
' @see writeCell 
Function writeString( xPos as Integer, yPos as Integer, value as String)
Dim myDoc Dim mySheet Dim myCell myDoc   = thisComponent 
mySheet = myDoc.sheets( 0 ) 
myCell  = mySheet.getCellByPosition( xPos, yPos )  
myCell.String = value  
End Function  
 
' overloaded function for string operations 
' @see readCell  Function readString( xPos as Integer, yPos as Integer) as String 
Dim myDoc 
Dim mySheet
Dim myCell
myDoc    = thisComponent 
mySheet  = myDoc.sheets( 0 ) 
myCell   = mySheet.getCellByPosition( xPos, yPos ) 
readString = myCell.String
End Function  
 
 
' readCell reads a number from the given cell position.
' @param the zero based xPos table position 
' @param the zero based yPos table position
' @return double (integer) value in the given position ' #todo# exception handling 
Function readCell( xPos as Integer, yPos as Integer) as Double 
Dim myDoc
Dim mySheet
myDoc    = thisComponent
mySheet  = myDoc.sheets( 0 )
readCell = mySheet.getCellByPosition( xPos, yPos ).getValue()
End Function