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. 

Das '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