home *** CD-ROM | disk | FTP | other *** search
/ CICA 1994 September / CICA_Shareware_for_Windows_Walnut_Creek_September_1994.iso / win3 / desktop / sh93v100.lzh / XLTAB < prev    next >
Text File  |  1993-09-10  |  3KB  |  150 lines

  1. # excel tabellier programm
  2. #
  3. #    F5    legt die Eingabezelle,
  4. #    F6    die Ausgabezelle und
  5. #    F7    den Spaltenbereich mit Werten für die Eingabezelle fest.
  6. #
  7. #    F8    startet die Tabellierung und gibt die Werte der Ausgabezelle
  8. #        spaltenweise ab der aktuellen Excel-Cursorposition aus.
  9. #
  10. #    Werfen Sie einen Blick in die get_range() Funktion, sie eignet
  11. #    sich gut als Bibliotheksfunktion.
  12. #
  13. #    Das Programm sollte sich ohne großen Aufwand auf andere
  14. #    Tabellenkalkulationen portieren lassen.
  15. #    Setzen Sie dazu remoteDDE (BEGIN Section) auf den richtigen Wert
  16. #    und ändern Sie die Belegung der shift+F2 Taste.
  17. #
  18.  
  19. FUNCTION get_range(range) {
  20.     local    file, top, bottom, left, right, x
  21.  
  22.     if (index(range, "!") == 0)
  23.         return (1);
  24.     else
  25.         file = substr(range, 1, rstart-1);
  26.  
  27.     x = substr(range, rstart+1);            # ZaSb:ZcSd
  28.     top = substr(x, 2) + 0;
  29.     if (index(x, "S") == 0)
  30.         return (1);
  31.     else
  32.         left = substr(x, rstart+1) + 0
  33.  
  34.     if (index(x, ":") == 0) {
  35.         bottom = top;
  36.         right = left;
  37.         return (0);
  38.         }
  39.  
  40.     x = substr(x, rstart+1)             # ZcSd
  41.     bottom = substr(x, 2) + 0
  42.     if (index(x, "S") == 0)
  43.         return (1);
  44.     else
  45.         right = substr(x, rstart+1) + 0
  46.  
  47.     return (0)
  48.     }
  49.  
  50.  
  51. FUNCTION celltest(cell) {
  52.     k = index(cell, "!")
  53.     if (k == 0)
  54.         return ("")
  55.  
  56.     k = (y = substr(cell, k)) |:
  57.         index(":")
  58.     if (k != 0)
  59.         return ("")
  60.  
  61.     return (cell);
  62.     }
  63.  
  64. FUNCTION coltest(col) {
  65.     if (get_range(col) == 1)
  66.         return ("");
  67.     else if (get_range["right"] != get_range["left"])
  68.         return ("")
  69.  
  70.     return (col)
  71.     }
  72.  
  73. FUNCTION nocell() {
  74.     inform(WINtext,
  75.            "Der von Ihnen markierte Bereich ist keine einzelne Zelle")
  76.     }
  77.  
  78.  
  79. /F5 "variablen zelle setzen"/ {
  80.     x = (SEL |get)
  81.     x = celltest(x)
  82.     if (x == "")
  83.         nocell()
  84.     else {
  85.         variabel = remoteDDE x
  86.         status("variable zelle = " variabel)
  87.         }
  88.     }
  89.  
  90. /F6 "ergebnis zelle setzen"/ {
  91.     if ((x = (SEL |get) |: celltest()) == "")
  92.         nocell()
  93.     else {
  94.         ergebnis = remoteDDE x
  95.         status("ergebnis zelle = " ergebnis)
  96.         }
  97.     }
  98.  
  99. /F7 "eingabe spalte setzen"/ {
  100.     if ((x = (SEL |get) |: coltest()) == "")
  101.         inform(WINtext, "Der markierte Bereich ist kein Spaltenbereich.")
  102.     else {
  103.         eingabe = x
  104.         status("eingabe bereich = " eingabe)
  105.         }
  106.     }
  107.  
  108. /F8 "tabellieren"/ {
  109.     if ((x = (SEL |get) |: celltest()) == "")
  110.         inform(WINtext, "Der markierte Bereich ist kein Spaltenbereich.")
  111.     else {
  112.         get_range(x)
  113.         outF = get_range["file"] "!"
  114.         outZ = get_range["top"];
  115.         outS = get_range["left"];
  116.  
  117.         get_range(eingabe)
  118.         varF = get_range["file"] "!"    # Achtung !
  119.         varZ = get_range["top"] + 0;    #    die Werte sind Strings!
  120.         varS = get_range["left"];    #
  121.         end  = get_range["bottom"] + 0;
  122.  
  123.         for (; varZ <= end; outZ++, varZ++) {
  124.             (remoteDDE varF "Z" varZ "S" varS) |get x
  125.             status(x)
  126.             y = x | variabel : ergebnis | (remoteDDE outF "Z" outZ "S" outS);
  127.             }
  128.         }
  129.     }
  130.  
  131.  
  132. BEGIN {
  133.     ctrl(2, "Excel Tabellierer", 3, 112)
  134.     close("") |: status()
  135.  
  136.     remoteDDE = "excel|"
  137.     SEL      = remoteDDE "system!selection"
  138.     }
  139.  
  140. /shift F2 "excel starten"/ {
  141.     exec("excel", 1)
  142.     }
  143.  
  144.  
  145. /F3 "dialog"/ {
  146.     x = paste("CF_TEXT") # |: tr("\n\r", "\t")     # |: sq("\t")
  147.     status(x)
  148.     split(x, data, "\r\n");
  149.     }
  150.