Zahlenformat: Zeit

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zahlenformat: Zeit

Re: Zahlenformat: Zeit

von balu » So, 01.02.2009 19:22

Hallo Sanne,
Sanne hat geschrieben: Datei darf aber nicht abwechselnd in 3.0 und 3.2 geöffnet werden
natürlich kannst Du die Datei in 3.0 und in 2.3 abwechselnd bearbeiten. Nur solltest Du darauf achten, dass in der 3er nicht das neue ODF-Format 1.2 gesetzt ist, sondern lieber das 1.0/1.1. Dann kannst Du beliebig wechseln.


Gruß
balu

Re: Zahlenformat: Zeit

von Gert Seler » So, 01.02.2009 12:30

Hallo Sanne,
folglich sollte für jede "Produktgruppe" ein eigenes "Tabellenblatt" bereitgestellt werden, das würde in etwa einer "Datenbank"
entsprechen.
Falls möglich schau Dir mal diese "URL's" mit Vorlagen_Beispielen an, eventuell findest Du ein "freeware-programm" :
http://ooo42.org/vorlagen.html

Man muß ja nicht jedesmal das "Rad" neu erfinden.
Falls auch der Zugriff auf "MS_Access" möglich ist, die haben eine schöne "Muster_DB" namens "Nordwind.mdb". Dort sind die "Artikel" in
"Artikelgruppen" unterteilt.

mfg
Gert

Re: Zahlenformat: Zeit

von hawe » Do, 29.01.2009 21:27

Das vereinfacht das Problem. Scheint mir aber eine wenig sinnvolle Aufgabe...
Dir fehlen elementare Starbasic Einsichten ;-), oder?

Code: Alles auswählen

'Änderungen zum Code oben

Sub register_Range_Listener() 
'Set ListenerRange -----------------------------------------------------
oRange = ThisComponent.Sheets.getByName("Tabelle1").GetCellRangeByName("A1:A1000") 
'-----------------------------------Register Sub prefix------------------
oRangeListner = CreateUnoListener( "colARangeListener_","com.sun.star.util.XModifyListener") 
oRange.addModifyListener(oRangeListner) 
End Sub 


Sub colARangeListener_modified( oEvent )
Dim oCell as Object

oCell = ThisComponent.CurrentController.Selection

if not (oCell.ImplementationName  = "ScCellObj") then
   'get active cell of selection range!
   oCell = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") 
   ThisComponent.CurrentController.Select(oCell) 
   oCell = ThisComponent.CurrentSelection    
endif

if oCell.getString = "CloseListener" then kill_Range_Listener: Exit Sub   

ThisComponent.Sheets.getByName("Tabelle2").GetCellRangeByName("A1").setValue(oCell.getValue)

End Sub

Re: Zahlenformat: Zeit

von hawe » Mo, 19.01.2009 22:15

Dann stell ich mal meinen Vorschalg vor, der von einem Modify-Listener gesteuert wird:
Jede Änderung im ListenerRange (hier H1:H20) führt auf die Prozedur timeRangeListener_modified( oEvent ),
die eine Eingabe von Ganzahl-Minuten in Calczeit umrechnet und das Format aus H1 auf die Eingabe anwendet.

Für eine automaische Registrierung des Eventlisteners muss die Prozedur register_Range_Listener() durch das Ereignis Dokument öffnen ausgeführt werden. Zum Testen kannst Du die Registrierung auch von Hand anstossen. Über das Ereignis Dokument schließen wird mit der Prozedur kill_Range_Listener() die Event-Loop wieder geschlossen.
Event-Loops sind sehr empfindlich gegen Arbeiten im Basic-Editor. Bevor also jemand bei laufender Event-Loop irgend was am Code fummeln will erst den Listener killen - macht z.B. die Eingabe CloseListener in eine Zelle im ListenerRange. Falls Du letztgenanntes, aus welchem Grund auch immer, nicht beachtest, dann Dokument speichern und neu öffnen!

Code: Alles auswählen

'(C)oded 2008 hw::lemitec.de
' ModifyListener to CellRange 

Global oRangeListner
Global oRange
Global bListenerModifing as Boolean
Global icellFMT as Integer
  
  
Sub kill_Range_Listener() 
On Error Resume Next
if (not IsNull(oRangeListner) and not IsEmpty(oRangeListner))  then
	oRange.removeModifyListener(oRangeListner) 
endif
End Sub 

 
Sub register_Range_Listener() 
'Set ListenerRange -----------------------------------------------------
icellFMT = ThisComponent.Sheets(0).GetCellRangeByName("H1").numberformat
oRange = ThisComponent.Sheets(0).GetCellRangeByName("H1:H20") 
'-----------------------------------Register Sub prefix------------------
oRangeListner = CreateUnoListener( "timeRangeListener_","com.sun.star.util.XModifyListener") 
oRange.addModifyListener(oRangeListner) 
End Sub 


Sub timeRangeListener_modified( oEvent )
Dim oCell as Object

if bListenerModifing then
	' break event loop
	bListenerModifing = false
	Exit Sub
endif

oCell = ThisComponent.CurrentController.Selection

if not (oCell.ImplementationName  = "ScCellObj") then
	'get active cell of selection range!
	oCell = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") 
	ThisComponent.CurrentController.Select(oCell) 
	oCell = ThisComponent.CurrentSelection 	
endif

if oCell.getString = "CloseListener" then kill_Range_Listener: Exit Sub	

bListenerModifing = true
oCell.setValue(oCell.getValue/24/60)
oCell.numberformat = icellFMT

End Sub

Re: Zahlenformat: Zeit

von chrk » Mo, 19.01.2009 20:29

Gast hat geschrieben:Mir ging es ja primär eben nur um das Format, weil ich es doch als wenig praxisgerecht empfinde, daß man Minuten nicht eben einfach als Minuten eingeben kann und den passenden Zeitausdruck dafür erhält.
Dafür habe ich Dir einen Weg aufgezeichnet. Vergiß nicht, dass Du es hier mit einer Tabellenkalkulation zu tun hast. Es gibt kein Datenformat, das 'Minuten' heißt, aber wenn Du verstanden hast, wie Calc Zeitwerte intern behandelt, kannst Du ganzzahlige Eingaben in Zeitwerte umrechnen lassen, nur nicht in ein und derselben Zelle. - Es ist eben eine Tabellenkalkulation.


Vielleicht hilft Dir zum allgemeinen Verständnis der Wiki-Artikel CalcFunktionenDatum/RechnenMitDatumUndZeit.

Re: Zahlenformat: Zeit

von hawe » So, 18.01.2009 21:00

Merkwürdige Anmache MrMurphy,

unser Pinguin hat von Anfang an eine klare Aufgabenstellung gehabt....
Unklar ist lediglich welcher Bereich an Eingabewerten zu erwarten ist?
Wenn man es einiger Maßen richtig machen will, dann sollte man wohl einen Modify-Listener auf die Eingabezellen setzen und eine Ganzzahleingebe in Minuten vereinbaren, die in der ListnerProzedur auf Calc-Zeitangaben runtergerechnet werden.
Kommt den eine Makrolösung in Betracht?

Re: Zahlenformat: Zeit

von MrMurphy » So, 18.01.2009 02:13

Hallo,
wenn eine eingegebene 70 beispielsweise automatisch in 01:10 umgewandelt wird, würde ich dieses nur begrüßen
Es ist immer schön, wenn die Fragen / Anforderungen nachträglich erweitert werden, damit kann man sich viele Freunde machen.
Das einzigste halt, was mich hier bei diesen Zeitangaben, ist, daß es nicht genügt, in die Zelle lediglich eine 20 zu schreiben, um den Zeitausdruck 00:20 zu erhalten;
Ich bin ein Fan von möglichst einfachen Eingaben. Und da ist das Einfügen von Doppelpunkten oder ähnlich schlecht zu erreichenden Buchstaben / Symbolen / Ziffern natürlich unrentabel. Deshalb arbeite ich mit ausgeblendeten Spalten, um "Zeiten" in Zahlen mit Kommastellen umzurechnen, dann damit zu rechnen und die wieder als "Zeiten" anzuzeigen.

Die Zeiten sind dabei nur einfach Zahlen, z. B. ist 725 = 7:25 Uhr oder 1611 = 16:11 Uhr oder 25 = 25 Minuten. Die Zahlen werden dabei so angezeigt, als handele es sich um Uhrzeiten, also in der Form "07:25". Allerdings wird eine Eingabe wie 70 nicht in 1:10 umgewandelt, sondern als 00:70 angezeigt. Gerechnet wird damit trotzdem richtig. Allerdings gehe ich bei meiner Arbeitszeittabelle davon aus, das die Anwender nur gültige Zeiten eingeben, was bei meinen Kollegen auch problemlos funktioniert.

Wenn du dein Problem mal etwas genauer beschreibst könnte ich versuchen, dir eine entsprechende Tabelle zu basteln. Allerdings nicht in der Salamitaktik, das du dann immer weitere Anforderungen hinzufügst. Wenn du eine Beispieltabelle wünscht, nenne bitte alle Anforderungen, die zur Zeit bestehen.

Gruss

MrMurphy

Re: Zahlenformat: Zeit

von hawe » Sa, 17.01.2009 12:23

Naja, da kann man schon was machen.
Je nachdem was Du mit den Werten anfangen willst.
Mit einem benutzerdefiniertem Format wie z.B. 00":"00 kannst Du Minuten-Ganzahlwerte eingeben, die dann wie Calczeiten aussehen. Solange Sie kleiner 1h sind.
Beim Zusammenzählen erhält man aber erstmal Minutensummen, die kann man entweder in Calczeiten umrechnen
=SUMME(xx:xx)/24/60
und als Calczeit formatieren oder im gleichen FOrmat anzeigen, muss aber auch wieder umrechnen, etwa
=GANZZAHL(SUMME(xx:xx)/60)*100+REST(SUMME(xx:xx);60)

Es kommt darauf an, was Du mit den Zahlen machen willst...

Re: Zahlenformat: Zeit

von chrk » Do, 15.01.2009 11:38

Gast hat geschrieben:Sollzustand: Eingabe Zelle 20 -> Ausdruck Bearbeitungsleiste 20 -> Zelle 00:20 ; Zeitformat: ???
So nicht. Eine ganzzahlige Eingabe in ein Zeit-/Datumsfeld gibt die Anzahl Tage (seit dem 30.12.1899 per Standardeinstellung). Stunden und Minuten sind Bruchteile von Tagen, 20 Minuten = 0,0138888888888889.
Der einfache Weg ist eine Eingabezelle für die Zeit in Minuten und eine Berechnung (=eingabezelle/24/60) in einer anderen Zelle, die du dann entsprechend als Zeit formatierst. Den [HH]-Überlauf brauchst Du nur bei einer möglichen eingabe ab 1440 min (=24h). - Gert hat das Problem von der falschen Seite angepackt, du willst ja Minuten eingeben und nicht Stunden. Eine Eingabe von "20:" funktioniert, damit die Eingabe automatisch als Stunden interpretiert wird, umgekehrt liefert ":20" aber leider nicht die Minuten, sondern wird als Text gelesen.

Re: Zahlenformat: Zeit

von Gert Seler » Do, 15.01.2009 11:19

Hallo pinguin,
das Format bitte so einstellen : [HH]:MM
sonst werden nur die Restwerte über 24Std oder durch 24teilbare Std ausgegeben.
Hinter der 20 muß ein : stehen (20: ) dann Stundenwerte.
Bei mir (WinXP; Ooo_Vers.3.0)

mfg
Gert

Nach oben