leerer String wird zu "0"

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: leerer String wird zu "0"

Re: leerer String wird zu "0"

von Karolus » Mo, 20.07.2015 18:13

Eine ganz naiv geschriebene UDF:

Code: Alles auswählen

function my_join(a,b,c,d)
	my_join = join(array(a,b,c),d)
end function
braucht 3 bis 5 sec für 10000 Ausführungen

die "pyjoin"***-Addin-funktion ( die ähnlich der oben geposteten funktion arbeitet), benötigt für die gleiche Aufgabe <0,5sec

Re: leerer String wird zu "0"

von clag » Mo, 20.07.2015 17:05

Hallo Karolus,

die beiden Varianten tun schon etwas (ich habe den Funktionsteil nur der Übersicht wegen weggelassen)
und zwar exakt das gleiche, nach dem Variante2 sich den String geholt hat, der in Variante1 übergeben wird.

Also das holen des String braucht länger wie die eigentliche Funktion war meine Erkenntnis die ich teilen wollte.
Wenn man es zurückrechnet braucht es ~ 5 mS um den String zu holen (auf meinem AMD 2x 1.8 MHz anno 2007) :wink:
~ 3 mS für die eigentliche Funktion.

Re: leerer String wird zu "0"

von Karolus » Mo, 20.07.2015 16:44

Dafür das die Funktion selbst eigentlich garnichts tut, sind beide Zeiten völlig indiskutabel.

Karolus

Re: leerer String wird zu "0"

von clag » Mo, 20.07.2015 16:21

Hallo,

habe es jetzt doch noch einmal anders versucht und Tabelle und Zelladresse direkt als String übergeben

Code: Alles auswählen

=MEINEFUNKTION("Tabelle4"; "M"&Zeile(A2)); 1)  
und dann innerhalb der Funktion den Text aus der Zelle geholt mit

Code: Alles auswählen

FUNCTION MEINEFUNKTION(Tab$, Cell$ , Para% ) 
oCalc = ThisComponent
myText = oCalc.Sheets.getByName(Tab).getCellRangeByName(Cell).String
damit habe ich das Problem mit dem "0" String gelöst aber es braucht hiermit mehr als die doppelte Zeit
(doppelklick füllen und berechnen) 7500 Zeilen, vorher 20 Sekunden, hiermit 50 Sekunden.
Also keine wirkliche Verbesserung :(

Re: leerer String wird zu "0"

von Karolus » Mo, 20.07.2015 11:26

Hallo
fühlst du dich auf den Schlips getreten?
Nein, ich wollte lediglich zum Ausdruck bringen, das aus dem Kontext nicht ersichtlich war, das im Falle einer leeren Zelle `MEINFUNKTION` gar nicht benötigt wird.

Re: leerer String wird zu "0"

von clag » Mo, 20.07.2015 10:32

Hallo Karolus,
Karolus hat geschrieben:woher sollte ich wissen das daß so gewünscht wird?
fühlst du dich auf den Schlips getreten?

Also mein Nachsatz, meine Anmerkung war ganz sicher nicht dazu gedacht dieses zu bewirken,
sondern ein Ausdruck dessen, das ich mit der Lösung leben kann.

peace Y :D

Re: leerer String wird zu "0"

von Karolus » Mo, 20.07.2015 10:08

clag hat geschrieben:Hallo Karolus,

jetzt wo du es so aufgezeigt hast, geht es auf die Art auch noch etwas resourcenschonender,
da ja der String aus der verknüpften Zelle verarbeitete werden soll,
braucht man die Funktion erst garnicht aufrufen wenn die verknüpfte Zelle leer ist

Code: Alles auswählen

=WENN(ISTLEER(A3);"";MEINEFUNKTION(A3);1))
woher sollte ich wissen das daß so gewünscht wird?

Re: leerer String wird zu "0"

von clag » Mo, 20.07.2015 09:39

Hallo Karolus,

jetzt wo du es so aufgezeigt hast, geht es auf die Art auch noch etwas resourcenschonender,
da ja der String aus der verknüpften Zelle verarbeitete werden soll,
braucht man die Funktion erst garnicht aufrufen wenn die verknüpfte Zelle leer ist

Code: Alles auswählen

=WENN(ISTLEER(A3);"";MEINEFUNKTION(A3);1))

Re: leerer String wird zu "0"

von clag » Mo, 20.07.2015 08:49

Hallo Karolus,

ok, innerhalb einer normalen UDF bekommt man es dann wohl nicht in den Griff.
Aber mit deiner Formel Variante kann man zumindest schon mal das Problem umschiffen, wenn es einem bewusst ist.
Uhhh mit "ADDins" damit "tue ich mich noch sehr schwer".

Besten Dank für die Aufklärung und Unterstützung.

Re: leerer String wird zu "0"

von Karolus » Mo, 20.07.2015 06:53

Du kannst in einer UDF nicht unterscheiden weil bereits Calc leere Zellen und Zellen mit dem Inhalt 0 als 0 weiterreicht.
clag hat geschrieben:Wie kann ich das Problem lösen?
kümmere dich vor der Übergabe ums casten:

Code: Alles auswählen

=MEINEFUNKTION(WENN(ISTLEER(A3);"";A3);1) 
oder schreibe eine Addinfunktion, dort kannst in der .idl Beschreibung festlegen wie die übergebenen Argumente gecastet werden.
http://www.openoffice.org/api/docs/comm ... AddIn.html

leerer String wird zu "0"

von clag » Mo, 20.07.2015 06:23

Hallo Kenner und Könner

in einer Benutzer definierten Funktion übergebe ich einen Zellen-String
in der Zelle steht =MEINEFUNKTION(A3;1)

Code: Alles auswählen

Function MeineFunktion(Text as String , Para as Integer)
MeineFunktion = Text 
end  Function
Dieses Funktion liefert mir einen Text "0" in der Zelle wenn A3 leer ist, wieso wird aus einer leeren Zelle "" ein Text "0" ?
Das erscheint mir unlogisch und störend, weil "leer" soll natürlich "leer" bleiben.

Wenn ich nun versuche das mit dieser Zeile auszubügeln

Code: Alles auswählen

if Text = "0" then Text =""  

tue ich ja etwas falsches, denn A3 könnte ja tatsächlich der Text "0" enthalten und der wird dann "platt" gemacht.
mit

Code: Alles auswählen

if isEmpty(Text) then Text ="" 
if isNull(Text) then Text =""
hatte ich keine Erfolg?

Wie kann ich das Problem lösen?

Nach oben