home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 March / Chip_1998-03_cd.bin / tema / MINICAD / MC7DEMO / MINICAD.1 / WORKSHT.TXT < prev    next >
Text File  |  1997-04-22  |  7KB  |  302 lines

  1. <!-------------------------------------------------------->
  2. Procedure ActivateWS(theWkshtName:STRING);
  3. VAR
  4.     SSHd:HANDLE;
  5. BEGIN
  6.     SSHd:=GetObject(theWkshtName);
  7.     SelectSS(SSHd);
  8. END;
  9. <!-------------------------------------------------------->
  10. Function WSExistH(WSName:STRING;VAR WSHd:HANDLE):BOOLEAN;
  11. BEGIN
  12.     WSHd:=GetObject(WSName);
  13.     IF WSHd <> NIL THEN
  14.         WSExist:=True
  15.     ELSE
  16.         WSExist:=False;
  17. END;
  18. <!-------------------------------------------------------->
  19. Function WSExist(WSName:STRING):BOOLEAN;
  20. VAR
  21.     WSHd:HANDLE;
  22. BEGIN
  23.     WSHd:=GetObject(WSName);
  24.     IF WSHd <> NIL THEN
  25.         WSExist:=True
  26.     ELSE
  27.         WSExist:=False;
  28. END;
  29. <!-------------------------------------------------------->
  30. Procedure BuildWorksheetDB(WSName,RecordName:STRING;StartRow:INTEGER);
  31. VAR
  32.     Q,CriteriaString:STRING;
  33.  
  34. Procedure ActivateWS(theWkshtName:STRING);
  35. VAR
  36.     SSHd:HANDLE;
  37. BEGIN
  38.     SSHd:=GetObject(theWkshtName);
  39.     SelectSS(SSHd);
  40. END;
  41.  
  42.  
  43. BEGIN
  44.     Q:=Chr(39);
  45.     
  46.     CriteriaString:=Concat('=Database((R IN[',Q,RecordName,Q,']))');
  47.     ActivateWS(WSName);
  48.     
  49.     LoadCell(StartRow,0,CriteriaString);
  50. END;
  51. <!-------------------------------------------------------->
  52. Procedure BuildDBColumnRF(WSName,Record,Field:STRING;Row,Column:INTEGER);
  53. VAR
  54.     theCriteria:STRING;
  55.  
  56.  
  57. Procedure ActivateWS(theWkshtName:STRING);
  58. VAR
  59.     SSHd:HANDLE;
  60. BEGIN
  61.     SSHd:=GetObject(theWkshtName);
  62.     SelectSS(SSHd);
  63. END;
  64.  
  65. Function BuildRecCrit(Record,Field:STRING;RecordOnly,UseEqual:BOOLEAN):STRING;
  66. VAR
  67.     Q,CriteriaString:STRING;
  68. BEGIN
  69.     Q:=Chr(39);
  70.     
  71.     IF RecordOnly THEN BEGIN
  72.         CriteriaString:=Concat('(R IN[',Q,Record,Q,'])');
  73.         IF UseEqual THEN
  74.             CriteriaString:=Concat('=',CriteriaString);
  75.     END
  76.     ELSE BEGIN
  77.         CriteriaString:=Concat('(',Q,Record,Q,'.',Q,Field,Q,')');
  78.         IF UseEqual THEN
  79.             CriteriaString:=Concat('=',CriteriaString);
  80.     END;
  81.     
  82.     BuildRecCrit:=CriteriaString;
  83. END;
  84.  
  85. BEGIN
  86.     ActivateWS(WSName);
  87.     LoadCell(Row,Column,BuildRecCrit(Record,Field,FALSE,TRUE));
  88. END;
  89. <!-------------------------------------------------------->
  90. Procedure BuildDBColumn(WksheetName,CriteriaString:STRING;Row,Column:INTEGER);
  91. VAR
  92.     theCriteria:STRING;
  93.  
  94.  
  95. Procedure ActivateWS(theWkshtName:STRING);
  96. VAR
  97.     SSHd:HANDLE;
  98. BEGIN
  99.     SSHd:=GetObject(theWkshtName);
  100.     SelectSS(SSHd);
  101. END;
  102.  
  103. BEGIN
  104.     ActivateWS(WksheetName);
  105.     LoadCell(Row,Column,CriteriaString);
  106. END;
  107. <!-------------------------------------------------------->
  108. Procedure Form2Number(WSName:STRING;StartRow,StartCol,EndRow,EndCol:INTEGER);
  109. VAR
  110.     theValue:REAL;
  111.     SSHd:HANDLE;
  112.     i,j:INTEGER;
  113. BEGIN
  114.     i:=StartCol;
  115.     j:=StartRow;
  116.     SSHd:=GetObject(WSName);
  117.     SelectSS(SSHd);
  118.     WHILE i <= EndCol DO BEGIN
  119.         WHILE j<=EndRow DO BEGIN
  120.             IF CellHasNum(SSHd,j,i) THEN BEGIN
  121.                 theValue:=GetCellNum(SSHd,j,i);
  122.                 LoadCell(j,i,Num2Str(3,theValue));
  123.             END;
  124.             j:=j+1;
  125.         END;
  126.         i:=i+1;
  127.         j:=StartRow;
  128.     END;
  129. END;
  130. <!-------------------------------------------------------->
  131. Procedure WKSExport(WkshtName,TargetFile:STRING;StartRow,StartCol,EndRow,EndCol:INTEGER;Formulas:BOOLEAN);
  132. VAR
  133.     Rows,Cols,RCount,CCount:INTEGER;
  134.     CellValue,CR:STRING;
  135.     SSHd:HANDLE;
  136.     Stop:BOOLEAN;
  137.  
  138. Function BoundsChk(Rows,Cols,RStart,REnd,CStart,CEnd:INTEGER):BOOLEAN;
  139. VAR
  140.     errorFound:BOOLEAN;
  141. BEGIN
  142.     IF (RStart <= 0) OR (RStart > Rows) OR (REnd > Rows) OR (RStart > REnd) OR
  143.     (CStart <= 0) OR (CStart > Cols) OR (CEnd > Cols) OR (CStart > CEnd) THEN BEGIN
  144.         errorFound:=True;
  145.     END
  146.     ELSE BEGIN
  147.         errorFound:=False;
  148.     END;
  149.     
  150.     BoundsChk:=errorFound;
  151. END;
  152.  
  153. BEGIN
  154.     RCount:=StartRow;
  155.     CCount:=StartCol;
  156.     CR:=Chr(13);
  157.     
  158.     SSHd:=GetObject(WkshtName);
  159.     SprdSize(SSHd,Rows,Cols);
  160.     
  161.     Stop:=BoundsCheck(Rows,Cols,StartRow,EndRow,StartCol,EndCol);
  162.     IF NOT Stop THEN BEGIN
  163.         Rewrite(TargetFile);
  164.         WHILE RCount <= EndRow DO BEGIN
  165.             WHILE CCount <= EndCol DO BEGIN
  166.                 IF Formulas THEN BEGIN
  167.                     CellValue:=GetCellStr(SSHd,RCount,CCount);
  168.                 END
  169.                 ELSE BEGIN
  170.                     CellValue:=Num2Str(3,GetCellNum(SSHd,RCount,CCount));
  171.                 END;
  172.                 Write(CellValue);
  173.                 IF CCount < EndCol THEN BEGIN
  174.                     Tab(1);
  175.                 END
  176.                 ELSE BEGIN
  177.                     Write(CR);
  178.                 END;
  179.                 CCount:=CCount+1;
  180.             END;
  181.             RCount:=RCount+1;
  182.             CCount:=StartCol;
  183.         END;
  184.  
  185.         Close(TargetFile);
  186.     END;
  187. END;
  188. Run(WKSExport);
  189. <!-------------------------------------------------------->
  190. Procedure VFind(WSName,MatchValue:STRING; LookupCol,RangeStart,RangeEnd:INTEGER;VAR hitLocation:INTEGER);
  191. VAR
  192.     totalRows,totalCols:INTEGER;
  193.     SSHd:HANDLE;
  194.     CellVal:STRING;
  195.     Found,Stop:BOOLEAN;
  196.     
  197. Function BoundsChk(Rows,Cols,RStart,REnd,LCol:INTEGER):BOOLEAN;
  198. VAR
  199.     errorFound:BOOLEAN;
  200. BEGIN
  201.     IF (RStart <= 0) OR (RStart > Rows) OR (REnd > Rows) OR (RStart >= REnd) OR
  202.     (LCol <= 0) OR (LCol>Cols) THEN BEGIN
  203.         errorFound:=True;
  204.     END
  205.     ELSE BEGIN
  206.         errorFound:=False;
  207.     END;
  208.     
  209.     BoundsChk:=errorFound;
  210. END;
  211.  
  212. BEGIN
  213.     SSHd:=GetObject(WSName);
  214.     SprdSize(SSHd,totalRows,totalCols);
  215.     Stop:=BoundsChk(totalRows,totalCols,RangeStart,RangeEnd,LookupCol);
  216.     
  217.     IF NOT Stop THEN BEGIN
  218.         REPEAT
  219.             CellVal:=GetCellStr(SSHd,RangeStart,LookupCol);
  220.             IF CellVal = MatchValue THEN BEGIN
  221.                 hitLocation:=RangeStart;
  222.                 Found:=True;
  223.             END
  224.             ELSE BEGIN
  225.                 RangeStart:=RangeStart+1;
  226.                 IF RangeStart > RangeEnd THEN BEGIN
  227.                     Found:=True;
  228.                     AlrtDialog('Error: Value not found');
  229.                 END;
  230.             END;
  231.         UNTIL Found OR (RangeStart > RangeEnd);
  232.     END
  233.     ELSE BEGIN
  234.         AlrtDialog('Error : Bad range value');
  235.     END;
  236.     Found:=False;
  237. END;
  238. <!-------------------------------------------------------->
  239. Procedure HOffsetReturn(WSName:STRING;baseRow,targetCol:INTEGER;retFormula:BOOLEAN;VAR targetValue:STRING);
  240. VAR
  241.     SSHd:HANDLE;
  242.     hasFormula:BOOLEAN;
  243. BEGIN
  244.     SSHd:=GetObject(WSName);
  245.     hasFormula:=CellHasNum(SSHd,baseRow,targetCol);
  246.     
  247.     IF hasFormula AND NOT retFormula THEN BEGIN
  248.         targetValue:=Num2Str(2,GetCellNum(SSHd,baseRow,targetCol));
  249.     END
  250.     ELSE BEGIN
  251.             targetValue:=GetCellStr(SSHd,baseRow,targetCol);
  252.     END;
  253. END;
  254. <!-------------------------------------------------------->
  255. Procedure VSeek(WSName,MatchString:STRING; LookupCol,RangeStart,RangeEnd,TargetCol:INTEGER;VAR targetValue:STRING);
  256. VAR
  257.     totalRows,totalCols:INTEGER;
  258.     SSHd:HANDLE;
  259.     CellVal:STRING;
  260.     Found,Stop:BOOLEAN;
  261.     
  262. Function BoundsChk(Rows,Cols,RStart,REnd,LCol,TCol:INTEGER):BOOLEAN;
  263. VAR
  264.     errorFound:BOOLEAN;
  265. BEGIN
  266.     IF (RStart <= 0) OR (RStart > Rows) OR (REnd > Rows) OR (RStart >= REnd) OR
  267.     (LCol <= 0) OR (TCol <= 0) OR (LCol>Cols) OR (TCol>Cols) THEN BEGIN
  268.         errorFound:=True;
  269.     END
  270.     ELSE BEGIN
  271.         errorFound:=False;
  272.     END;
  273.     
  274.     BoundsChk:=errorFound;
  275. END;
  276.  
  277. BEGIN
  278.     SSHd:=GetObject(WSName);
  279.     SprdSize(SSHd,totalRows,totalCols);
  280.     Stop:=BoundsChk(totalRows,totalCols,RangeStart,RangeEnd,LookupCol,TargetCol);
  281.     
  282.     IF NOT Stop THEN BEGIN
  283.         REPEAT
  284.             CellVal:=GetCellStr(SSHd,RangeStart,LookupCol);
  285.             IF Pos(MatchStr,CellVal) <> 0 THEN BEGIN
  286.                 targetValue:=GetCellStr(SSHd,RangeStart,TargetCol);
  287.                 Found:=True;
  288.             END
  289.             ELSE BEGIN
  290.                 RangeStart:=RangeStart+1;
  291.                 IF RangeStart > RangeEnd THEN BEGIN
  292.                     Found:=True;
  293.                     AlrtDialog('Error: Value not found');
  294.                 END;
  295.             END;
  296.         UNTIL Found OR (RangeStart > RangeEnd);
  297.     END
  298.     ELSE BEGIN
  299.         AlrtDialog('Error : Bad range value');
  300.     END;
  301. END;
  302.