# excel tabellier programm # # F5 legt die Eingabezelle, # F6 die Ausgabezelle und # F7 den Spaltenbereich mit Werten fr die Eingabezelle fest. # # F8 startet die Tabellierung und gibt die Werte der Ausgabezelle # spaltenweise ab der aktuellen Excel-Cursorposition aus. # # Werfen Sie einen Blick in die get_range() Funktion, sie eignet # sich gut als Bibliotheksfunktion. # # Das Programm sollte sich ohne groen Aufwand auf andere # Tabellenkalkulationen portieren lassen. # Setzen Sie dazu remoteDDE (BEGIN Section) auf den richtigen Wert # und ndern Sie die Belegung der shift+F2 Taste. # FUNCTION get_range(range) { local file, top, bottom, left, right, x if (index(range, "!") == 0) return (1); else file = substr(range, 1, rstart-1); x = substr(range, rstart+1); # ZaSb:ZcSd top = substr(x, 2) + 0; if (index(x, "S") == 0) return (1); else left = substr(x, rstart+1) + 0 if (index(x, ":") == 0) { bottom = top; right = left; return (0); } x = substr(x, rstart+1) # ZcSd bottom = substr(x, 2) + 0 if (index(x, "S") == 0) return (1); else right = substr(x, rstart+1) + 0 return (0) } FUNCTION celltest(cell) { k = index(cell, "!") if (k == 0) return ("") k = (y = substr(cell, k)) |: index(":") if (k != 0) return ("") return (cell); } FUNCTION coltest(col) { if (get_range(col) == 1) return (""); else if (get_range["right"] != get_range["left"]) return ("") return (col) } FUNCTION nocell() { inform(WINtext, "Der von Ihnen markierte Bereich ist keine einzelne Zelle") } /F5 "variablen zelle setzen"/ { x = (SEL |get) x = celltest(x) if (x == "") nocell() else { variabel = remoteDDE x status("variable zelle = " variabel) } } /F6 "ergebnis zelle setzen"/ { if ((x = (SEL |get) |: celltest()) == "") nocell() else { ergebnis = remoteDDE x status("ergebnis zelle = " ergebnis) } } /F7 "eingabe spalte setzen"/ { if ((x = (SEL |get) |: coltest()) == "") inform(WINtext, "Der markierte Bereich ist kein Spaltenbereich.") else { eingabe = x status("eingabe bereich = " eingabe) } } /F8 "tabellieren"/ { if ((x = (SEL |get) |: celltest()) == "") inform(WINtext, "Der markierte Bereich ist kein Spaltenbereich.") else { get_range(x) outF = get_range["file"] "!" outZ = get_range["top"]; outS = get_range["left"]; get_range(eingabe) varF = get_range["file"] "!" # Achtung ! varZ = get_range["top"] + 0; # die Werte sind Strings! varS = get_range["left"]; # end = get_range["bottom"] + 0; for (; varZ <= end; outZ++, varZ++) { (remoteDDE varF "Z" varZ "S" varS) |get x status(x) y = x | variabel : ergebnis | (remoteDDE outF "Z" outZ "S" outS); } } } BEGIN { ctrl(2, "Excel Tabellierer", 3, 112) close("") |: status() remoteDDE = "excel|" SEL = remoteDDE "system!selection" } /shift F2 "excel starten"/ { exec("excel", 1) } /F3 "dialog"/ { x = paste("CF_TEXT") # |: tr("\n\r", "\t") # |: sq("\t") status(x) split(x, data, "\r\n"); }