Basic Programmierung für Calc

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

witchcorp
**
Beiträge: 25
Registriert: Mo, 09.08.2004 08:30
Wohnort: Westerwald

Basic Programmierung für Calc

Beitrag von witchcorp »

Hallo,
ich habe mir vorgenommen eine calc Tabellendokument mit einen Formular zu entwerfen, dass diese Tabellen mit Werten füttert. Ich habe dazu zwei Fragen.
1. Wie kann ich die Werte aus den Formularfeldern auslesen, die dann eingetragen werden sollen?
2. Wie kann ich die Zellen, in die die Werte kommen sollen so ansprechen, dass immer die nächste leere Zeile verwendet wird.
Bisher habe ich folgenden Code entwickelt (Bitte nicht lachen, ich bin blutige Anfängerin :oops: )

Private Sub OKButton_Click()
Dim art As String
DIM dat As Long
DIM hab As String
DIM sol As String
DIM beschr As String
DIM oDocument as Object, oSheet as Object, oCell as Object, oComboBox as Object
art = oComboBoxArt
dat = oDateFieldDatum
hab = oTextBoxHaben
sol = oTextBoxSoll
oDocument=ThisComponent
If art = ("Betriebskosten") Then
oSheet=oDocument.Sheets.getByName("Betriebskosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Autokosten") Then
oSheet=oDocument.Sheets.getByName("Autokosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Mietkosten") Then
oSheet=oDocument.Sheets.getByName("Mietkosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Durchlaufende") Then
oSheet=oDocument.Sheets.getByName("Durchlaufende")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Einnahmen") Then
oSheet=oDocument.Sheets.getByName("Einnahmnen")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Kassenbuch") Then
oSheet=oDocument.Sheets.getByName("Kassenbuch")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
else
oSheet=oDocument.Sheets.getByName("Betriebskosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
End If

End Sub

Dieser Code trägt mir immerhin Werte (leider nur Nullen) in das sheet "Betriebskosten" ein. Die anderen elseif Bedingungen sind nicht testbar, da ich ja die Werte nicht aus den Boxen rauskriege. Zudem habe ich bisher auch nur rausbekommen wie ich die Zellen über die Position ansprechen kann, also nicht relativ.
Ich sitze seit zwei Tagen mit verschiedenen Dokumentationen dran kriegs aber nicht hin (Ich kann kein "Variable nicht belegt" mehr sehn :x )
Danke
Bianca
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Hallo Bianca,
1. Wie kann ich die Werte aus den Formularfeldern auslesen, die dann eingetragen werden sollen?
Da das Formular Bestandteil des Calc-Dokuments ist:
ich habe mir vorgenommen eine calc Tabellendokument mit einen Formular zu entwerfen,
z.B. so:

Code: Alles auswählen

Sub auslesen
Dim oDoc As Object
Dim oSheet As Object
Dim oForm As Object
Dim oComboBox As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")	
oComboBox = oform.getByName("ComboBox1")
msgbox oComboBox.text	
End Sub
Dieser Code liest den aktuellen Inhalt des Kombinationsfeldes namens "ComboBox1" auf dem Formular/Tabellenblatt "Formular". (Hinweis: Datumsfelder lesen mit .date und Rückgabewert evtl. in passerndes Format umformen)

2. Wie kann ich die Zellen, in die die Werte kommen sollen so ansprechen, dass immer die nächste leere Zeile verwendet wird.
hier ein Schnipsel:

Code: Alles auswählen

'...
oSheet=oDocument.Sheets.getByName("Betriebskosten")
Cursor = oSheet.createCursor() 
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.Value = dat 
oCell=oSheet.getCellByPosition(1, Zeile+1) 
oCell.Value = hab 
oCell=oSheet.getCellByPosition(2, Zeile+1) 
oCell.Value = sol 
oCell=oSheet.getCellByPosition(3, Zeile+1) 
oCell.Value = beschr 
'...
Hinweis: Mit oCell.Value kannst Du nur numerische Inhalte übergeben. Da ein Teil Deiner Variablen als String deklariert ist mußt Du die Werte dieser Variablen mittels oCell.String = ... in die Zellen schreiben.


Gruß
Stephan
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo!

Ich lerne mich gerade auch dem Gebiet ein. Zum Lernen empfehle ich dir folgende Datei:

Fahrtenbuch_Muster.sxc mit der dazugehörigen Dokmentation in PDF.

Darin ist der Umgang mit Eingabemasken in Calc-Dokumenten genau beschrieben.
Du kannst die Datei herunterladen unter folgendem Link

http://www.amt-wiesbaden.de/index.php?z ... t08&rm=r01


Ich hoffe dir hilt das genauso wie mir.


Gruß
Charly
witchcorp
**
Beiträge: 25
Registriert: Mo, 09.08.2004 08:30
Wohnort: Westerwald

Beitrag von witchcorp »

Vielen Dank,
jetzt klappt alles bis auf die Umwandlung des Datums in das Normalformat. Aus 20040809 sollte noch irgendwas mit Punkten werden.
CdateToIso will er nicht. Wie geht das??
Danke
Bianca
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

CdateFromIso

Stephan
witchcorp
**
Beiträge: 25
Registriert: Mo, 09.08.2004 08:30
Wohnort: Westerwald

Beitrag von witchcorp »

Hallo Stephan,
er will es nicht nehmen, an keiner Stelle.
Folgende Varianten habe ich probiert:

Code: Alles auswählen

oDoc = ThisComponent 
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oform.getByName("oComboBoxArt") 
art = oComboBox.text 
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oDateField = oform.getByName("oDateFieldDatum")
dat = oDateField.date
CdateFromIso

Code: Alles auswählen

If art = ("Betriebskosten") Then
oSheet=oDocument.Sheets.getByName("Betriebskosten")
Cursor = oSheet.createCursor() 
Cursor.gotoEndOfUsedArea (true) 
Zeile = Cursor.getRangeAddress().EndRow 
oCell=oSheet.getCellByPosition(0, Zeile+1) 
oCell.value = dat
CdateFromIso
Dabei habe ich es jeweils davor und dahinter versucht und auch in einer Zeile :cry:
Ich bekomme immer den Fehler ungültiger Prozeduraufruf oder Methode unbekannt.
Bianca
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Hallo Bianca,

Deine Frage nach CdateToIso war so überzeugend gestellt, das ich dachte Du weißt wie das zu handhaben ist. Das Folgende funktioniert:

Code: Alles auswählen

Sub Main
oDoc = ThisComponent 
oSheet = oDoc.Sheets.GetByName("Formular") 
oForm = oSheet.DrawPage.Forms.GetByName("Standard")    
oComboBox = oForm.getByName("oComboBoxArt") 
art = oComboBox.text 
oDateField = oform.getByName("oDateFieldDatum") 
dat = CdateFromIso(oDateField.date)
If art = ("Betriebskosten") Then 
	oSheet = oDoc.Sheets.getByName("Betriebskosten") 
	Cursor = oSheet.createCursor() 
	Cursor.gotoEndOfUsedArea (true) 
	Zeile = Cursor.getRangeAddress().EndRow 
	oCell=oSheet.getCellByPosition(0, Zeile+1) 
	oCell.value = dat
	oDoc.CurrentController.Select(oCell)
	oDoc.CurrentSelection.NumberFormat = 36
End If
End Sub
Gruß
Stephan
witchcorp
**
Beiträge: 25
Registriert: Mo, 09.08.2004 08:30
Wohnort: Westerwald

Beitrag von witchcorp »

Yuchuu es klappt alles :D
und ich hab bloss diese blöden Klammern "dat = CDateFromIso(oDateField.date)"nicht gesetzt bei meinen Versuchen. Was bewirken die denn. Btw ich bin wirklich blutige Anfängerin ich hab mich vor 2 Tagen zum ersten Mal ans Programmieren rangetraut weil ich die Erstellung von Excell-Tabellen für meinen Steuerberater partout mit Openoffice realisieren wollte. Und die Eingabe will man natürlich möglichst komfortabel gestalten :wink: . Herausgekommen ist ein Calc Dokument mit integriertem Kassenbuch und einem einzigen Eingabeformular für die verschiedenen steuerrelevanten betrieblichen Ausgaben "ein bischen stolz guck".
Vielen Dank nochmal für die prompte Hilfe
Bianca
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

und ich hab bloss diese blöden Klammern "dat = CDateFromIso(oDateField.date)"nicht gesetzt bei meinen Versuchen. Was bewirken die denn.
Die Klammern schließen den übergebenen Parameter ein. Ein Äquivalent für:
dat = CDateFromIso(oDateField.date)
ist:
dat = oDateField.date
dat = CDateFromIso(dat)

oder (im Speziellen):
dat = CDateFromIso(20040809)

Stephan
Antworten