[GELÖST] setFormulaArray und Datum ...

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

Moderator: Moderatoren

howtoman
*
Beiträge: 19
Registriert: So, 29.05.2011 13:06

[GELÖST] setFormulaArray und Datum ...

Beitrag von howtoman »

Hallo, wollte fragen wie man mit setFormulaArray und Datum Werten klar kommt.

Zellen: A2 - C2 haben TEXT FORMAT!! (ganz wichtig)

Code:

Code: Alles auswählen

Dim oSheet
	dim array2d(0,2)
	array2d(0,0) = "05.04.12"
	array2d(0,1) = "15.04.12"
	array2d(0,2) = "105.04.12"
	
	oSheet = ThisComponent.sheets(0)
	cursor = oSheet.createCursorByRange(oSheet.getCellRangeByName("A2:C2"))
	cursor.setFormulaArray(array2d)
Die Werte die tatsächlich in Textformatierte (@) Zeilen eingefügt werden, sind leider zu unterschiedlich. Liegt wahrscheinlich an irgendeine Datumserkennung oder so, weil Werte ab 13.04.12 z.B. sind ok, nicht Datum Zahlen schon nicht ok, und unter 13 auch nicht ok, als Datum aber noch erkennbar, wenn man es konvertiert.

So, die Frage ist eingentlich ob ich die Werte, als Text in eine Zelle die auch als TextZelle formatiert ist, normal übertragen kann? Kann ich vllt irgendwie die Datumkonvertierung abschalten?

*
setFormulaArray muss ich benutzen, da auch verschiedene formulas dazwischen kommen. Das ganze ist um von einem Dokument einige Zeilen in einen anderen Dok zu übertragen.
Danke.
Zuletzt geändert von howtoman am Mi, 13.06.2012 20:00, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: setFormulaArray und Datum ...

Beitrag von Stephan »

Kann ich vllt irgendwie die Datumkonvertierung abschalten?

Stelle, wie auch bei händischer Eingabe üblich, ein Hochkomma voran:

Code: Alles auswählen

array2d(0,0) = "'05.04.12"
array2d(0,1) = "'15.04.12"
array2d(0,2) = "'105.04.12"


Gruß
Stephan
howtoman
*
Beiträge: 19
Registriert: So, 29.05.2011 13:06

Re: setFormulaArray und Datum ...

Beitrag von howtoman »

Stephan hat geschrieben:Kann ich vllt irgendwie die Datumkonvertierung abschalten?

Stelle, wie auch bei händischer Eingabe üblich, ein Hochkomma voran:

Code: Alles auswählen

array2d(0,0) = "'05.04.12"
array2d(0,1) = "'15.04.12"
array2d(0,2) = "'105.04.12"


Gruß
Stephan
Stephan, danke für die Antwort.
Ja, so gehts, leider brauche ich und der Anwender, die Daten ohne Hochkomma, weil die Inhalte danach für Auswertungen und Berechnungen benutzt werden .
Vllt vor dem Kopiervorgangang Hochkommas setzen, danach wieder löschen.. dann wäre es glaube ich leichter gar keine setAFromulaArray Funktion zu benutzen. Nu Zelle bei Zelle einfügen....

Vllt sonst irgendeine möglichkeit so ein Problem zu lösen?
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: setFormulaArray und Datum ...

Beitrag von Karolus »

Hallo
1. Du musst das Hochkomma nicht per per Code hinzufügen, ändere einfach die Methode:
  • cursor.setDataArray(array2d)
2.Das Hochkomma dient nur zur Formatierung als Text es ist auch in der Zelle nicht sichtbar

3. wieso erstellst du zuerst:
  • oSheet.createCursorByRange(oSheet.getCellRangeByName("A2:C2"))

du könntest doch direkt:
  • oSheet.getCellRangeByName("A2:C2").setDataArray(array2d)
Alles zusammen dann so:

Code: Alles auswählen

Sub Main
Dim oSheet

   array2d()  = array(array("05.04.12", "15.04.12", "105.04.12"))   
   oSheet = ThisComponent.sheets(0)
   oSheet.getCellRangeByName("A2:C2").setDataArray(array2d)
   
End Sub
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
howtoman
*
Beiträge: 19
Registriert: So, 29.05.2011 13:06

Re: setFormulaArray und Datum ...

Beitrag von howtoman »

Danke für die Antwort Karolus.

3. danke, ich dachte mir schon dass es irgendwie falsch ist ^^

1,2,
Das mit Formula, ja, das Problem ist, dass die Formeln auch dabei sind, beim Übertragen..

Praktisch ich muss eine vollständige Zeile so wie sie ist in einem anderen Dokument kopieren. Danach nachbearbeiten, auswerten, berechnen per makro. Alle zellen sind als Text formatiert, in beiden Doks.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: setFormulaArray und Datum ...

Beitrag von Stephan »

Ja, so gehts, leider brauche ich und der Anwender, die Daten ohne Hochkomma, weil die Inhalte danach für Auswertungen und Berechnungen benutzt werden .
Vllt vor dem Kopiervorgangang Hochkommas setzen, danach wieder löschen.. dann wäre es glaube ich leichter gar keine setAFromulaArray Funktion zu benutzen. Nu Zelle bei Zelle einfügen....
Leider verstehe ich nicht was mir das sagen soll. Du wolltest:
Die Werte die tatsächlich in Textformatierte (@) Zeilen eingefügt werden, sind leider zu unterschiedlich. Liegt wahrscheinlich an irgendeine Datumserkennung oder so, weil Werte ab 13.04.12 z.B. sind ok, nicht Datum Zahlen schon nicht ok, und unter 13 auch nicht ok, als Datum aber noch erkennbar, wenn man es konvertiert.

So, die Frage ist eingentlich ob ich die Werte, als Text in eine Zelle die auch als TextZelle formatiert ist, normal übertragen kann? Kann ich vllt irgendwie die Datumkonvertierung abschalten?
unter Beachtung von:
setFormulaArray muss ich benutzen
und genau dass macht mein Vorschlag.

Das anschließend, beim Kopieren von Werten aus den Calc-Zellen heraus natürlich NICHT die Hochkommas mit kopiert werden ist Tabellenkalkulations-Grundwissen.

Falls es hingegen stören sollte im Makro selber die Hochkommas getrennt einzutragen, wäre ja auch:

Code: Alles auswählen

Dim oSheet
   dim array2d(0,2)
   array2d(0,0) = "05.04.12"
   array2d(0,1) = "15.04.12"
   array2d(0,2) = "105.04.12"

  For i = 0 To 2
    array2d(0,i) = "'" & array2d(0,i)
  Next i
   
   oSheet = ThisComponent.sheets(0)
   cursor = oSheet.createCursorByRange(oSheet.getCellRangeByName("A2:C2"))
   cursor.setFormulaArray(array2d)
möglich.
howtoman
*
Beiträge: 19
Registriert: So, 29.05.2011 13:06

Re: setFormulaArray und Datum ...

Beitrag von howtoman »

das mit Hochkommas, wusste ich übrigens nicht dass die werte OHNE übertragen werden.
Das problem ist, dass ich auch manchmal formeln habe.
Ich mach jetzt ein anderes Beispiel.

Das geht übrigens (mit getFormulaArray, setFormulaArray):

Code: Alles auswählen

Dim oSheet, oSheet2, dok1 as object, dok2 as object

	dok1 = getOpenedDocByTitle("dokFrom", 1) 'unwichtig hier, also einfach geoeffnetes dokument.
	dok2 = getOpenedDocByTitle("dokTo", 1)
	
	oSheet = dok1.sheets(0)
	oSheet2 = dok2.sheets(0)
	
	array2d  = oSheet.getCellRangeByName("A2:D2").getFormulaArray()
	'array2d(0)(2) = Cstr("105.04.12") ' falls ich etwas ändern will, wird eine zahl eingesetzt.
	oSheet2.getCellRangeByName("A2:D2").setFormulaArray(array2d)
so, wenn man manuel den Array erstellt, oder etwas ändert, werden Zahlen statt Datumstext eingefügt.

Code: Alles auswählen

'	dim array2d(0,3)
'	array2d(0,0) = "05.04.12"
'	array2d(0,1) = "15.04.12"
'	array2d(0,2) = "105.04.12"
'	array2d(0,3) = "=B2"
Auch als array of arrays

Code: Alles auswählen

array2d= Array((Array( "05.04.12", "15.04.12", "105.04.12", "=B2"))
das sind die Beispielinhalte die ich übertragen will (formeln, datum, texte ...), die zwischendurch in Arrays und Objects ("Type") gespeichert und bearbeitet werden.

Noch etwas habe ich bemerkt, beim getFormulaArray() wird ein Object zuruckgegeben, beim Array Erstellen wird Variant (laut Debugger) zuruckgegeben.
Beim ändern eines Wertes nach dem getFormulaArray(), bleibt die variable "Object" eingefügt wird aber genau das geänderte Wert falsch :/

Kann es sein dass man beim Object das man mit "getFormulaArray()" erhält, irgendwie anders die Daten drin ändern kann?


*Und danke für die Antworten und Lösungsversuche!
howtoman
*
Beiträge: 19
Registriert: So, 29.05.2011 13:06

Re: setFormulaArray und Datum ...

Beitrag von howtoman »

Als Lösung, nach dem was Stephan empfohlen hat, habe ich in die Funktion die die Daten einfügt, folgendes hinzugefügt:

Code: Alles auswählen

for i = Lbound(dataArray) to Ubound(dataArray)
	
		on error resume next
			dateVal = Datevalue(dataArray(i))
		On Error GoTo 0
		
		if dateVal > 18264  AND dateVal < 73051 then 'von 01.01.1950 - 01.01.2100 '  kann einfach "<> 0" sein fuer alle moegliche Datumseingaben
			dataArray(i) = "'" & dataArray(i)
		endif
		
		
next i
Da ich nicht weiss welche Zellen welche inhalte haben.

Und erst danach setFormulaArray()

Danke :)
howtoman
*
Beiträge: 19
Registriert: So, 29.05.2011 13:06

Re: [GELÖST] setFormulaArray und Datum ...

Beitrag von howtoman »

nein, doch nicht perfekt :(
so eine Zahl: "21.5" wird als Datum erkannt >.<
Es gibt kein regEx bei StarBasic, oder?

hab so eine HELP Function geschrieben, die nicht immer, aber schon signifikant ein Datum bestimmt.

Code: Alles auswählen

'prueft ob sDate wirklich ein Datum in format dd.mm.yy oder dd.mm.yyyy ist. (95%)
Function istDatum(sDate as String, optional delimitter as String) as Boolean
	On Error GoTo ErrorHandler
	
	If isDate(sDate) Then
	
		If IsMissing(delimitter) Then delimitter = "."
		Dim aDate as Variant
		aDate = Split(sDate, delimitter)
		
		If Ubound(aDate) = 2 Then
			If Len(aDate(0)) = 2 AND Len(aDate(1)) = 2 AND (Len(aDate(2)) = 2 OR Len(aDate(2)) = 4) Then
				If Cint(aDate(0)) <= 31 AND Cint(aDate(0)) > 0 AND Cint(aDate(1)) <= 12 AND Cint(aDate(1)) > 0 Then
					istDatum = true
				EndIf
			EndIf
		EndIf
	EndIf
	
	Exit Function
	ErrorHandler:
	istDatum = false
End Function

Jemand vllt doch eine mega Idee wie man das Ganze richtig (ohne mehrerer Überprüfungen, extra Functionen und 100%-ig) übertragen kann ?
Antworten