Procedure ActivateWS(theWkshtName:STRING); VAR SSHd:HANDLE; BEGIN SSHd:=GetObject(theWkshtName); SelectSS(SSHd); END; Function WSExistH(WSName:STRING;VAR WSHd:HANDLE):BOOLEAN; BEGIN WSHd:=GetObject(WSName); IF WSHd <> NIL THEN WSExist:=True ELSE WSExist:=False; END; Function WSExist(WSName:STRING):BOOLEAN; VAR WSHd:HANDLE; BEGIN WSHd:=GetObject(WSName); IF WSHd <> NIL THEN WSExist:=True ELSE WSExist:=False; END; Procedure BuildWorksheetDB(WSName,RecordName:STRING;StartRow:INTEGER); VAR Q,CriteriaString:STRING; Procedure ActivateWS(theWkshtName:STRING); VAR SSHd:HANDLE; BEGIN SSHd:=GetObject(theWkshtName); SelectSS(SSHd); END; BEGIN Q:=Chr(39); CriteriaString:=Concat('=Database((R IN[',Q,RecordName,Q,']))'); ActivateWS(WSName); LoadCell(StartRow,0,CriteriaString); END; Procedure BuildDBColumnRF(WSName,Record,Field:STRING;Row,Column:INTEGER); VAR theCriteria:STRING; Procedure ActivateWS(theWkshtName:STRING); VAR SSHd:HANDLE; BEGIN SSHd:=GetObject(theWkshtName); SelectSS(SSHd); END; Function BuildRecCrit(Record,Field:STRING;RecordOnly,UseEqual:BOOLEAN):STRING; VAR Q,CriteriaString:STRING; BEGIN Q:=Chr(39); IF RecordOnly THEN BEGIN CriteriaString:=Concat('(R IN[',Q,Record,Q,'])'); IF UseEqual THEN CriteriaString:=Concat('=',CriteriaString); END ELSE BEGIN CriteriaString:=Concat('(',Q,Record,Q,'.',Q,Field,Q,')'); IF UseEqual THEN CriteriaString:=Concat('=',CriteriaString); END; BuildRecCrit:=CriteriaString; END; BEGIN ActivateWS(WSName); LoadCell(Row,Column,BuildRecCrit(Record,Field,FALSE,TRUE)); END; Procedure BuildDBColumn(WksheetName,CriteriaString:STRING;Row,Column:INTEGER); VAR theCriteria:STRING; Procedure ActivateWS(theWkshtName:STRING); VAR SSHd:HANDLE; BEGIN SSHd:=GetObject(theWkshtName); SelectSS(SSHd); END; BEGIN ActivateWS(WksheetName); LoadCell(Row,Column,CriteriaString); END; Procedure Form2Number(WSName:STRING;StartRow,StartCol,EndRow,EndCol:INTEGER); VAR theValue:REAL; SSHd:HANDLE; i,j:INTEGER; BEGIN i:=StartCol; j:=StartRow; SSHd:=GetObject(WSName); SelectSS(SSHd); WHILE i <= EndCol DO BEGIN WHILE j<=EndRow DO BEGIN IF CellHasNum(SSHd,j,i) THEN BEGIN theValue:=GetCellNum(SSHd,j,i); LoadCell(j,i,Num2Str(3,theValue)); END; j:=j+1; END; i:=i+1; j:=StartRow; END; END; Procedure WKSExport(WkshtName,TargetFile:STRING;StartRow,StartCol,EndRow,EndCol:INTEGER;Formulas:BOOLEAN); VAR Rows,Cols,RCount,CCount:INTEGER; CellValue,CR:STRING; SSHd:HANDLE; Stop:BOOLEAN; Function BoundsChk(Rows,Cols,RStart,REnd,CStart,CEnd:INTEGER):BOOLEAN; VAR errorFound:BOOLEAN; BEGIN IF (RStart <= 0) OR (RStart > Rows) OR (REnd > Rows) OR (RStart > REnd) OR (CStart <= 0) OR (CStart > Cols) OR (CEnd > Cols) OR (CStart > CEnd) THEN BEGIN errorFound:=True; END ELSE BEGIN errorFound:=False; END; BoundsChk:=errorFound; END; BEGIN RCount:=StartRow; CCount:=StartCol; CR:=Chr(13); SSHd:=GetObject(WkshtName); SprdSize(SSHd,Rows,Cols); Stop:=BoundsCheck(Rows,Cols,StartRow,EndRow,StartCol,EndCol); IF NOT Stop THEN BEGIN Rewrite(TargetFile); WHILE RCount <= EndRow DO BEGIN WHILE CCount <= EndCol DO BEGIN IF Formulas THEN BEGIN CellValue:=GetCellStr(SSHd,RCount,CCount); END ELSE BEGIN CellValue:=Num2Str(3,GetCellNum(SSHd,RCount,CCount)); END; Write(CellValue); IF CCount < EndCol THEN BEGIN Tab(1); END ELSE BEGIN Write(CR); END; CCount:=CCount+1; END; RCount:=RCount+1; CCount:=StartCol; END; Close(TargetFile); END; END; Run(WKSExport); Procedure VFind(WSName,MatchValue:STRING; LookupCol,RangeStart,RangeEnd:INTEGER;VAR hitLocation:INTEGER); VAR totalRows,totalCols:INTEGER; SSHd:HANDLE; CellVal:STRING; Found,Stop:BOOLEAN; Function BoundsChk(Rows,Cols,RStart,REnd,LCol:INTEGER):BOOLEAN; VAR errorFound:BOOLEAN; BEGIN IF (RStart <= 0) OR (RStart > Rows) OR (REnd > Rows) OR (RStart >= REnd) OR (LCol <= 0) OR (LCol>Cols) THEN BEGIN errorFound:=True; END ELSE BEGIN errorFound:=False; END; BoundsChk:=errorFound; END; BEGIN SSHd:=GetObject(WSName); SprdSize(SSHd,totalRows,totalCols); Stop:=BoundsChk(totalRows,totalCols,RangeStart,RangeEnd,LookupCol); IF NOT Stop THEN BEGIN REPEAT CellVal:=GetCellStr(SSHd,RangeStart,LookupCol); IF CellVal = MatchValue THEN BEGIN hitLocation:=RangeStart; Found:=True; END ELSE BEGIN RangeStart:=RangeStart+1; IF RangeStart > RangeEnd THEN BEGIN Found:=True; AlrtDialog('Error: Value not found'); END; END; UNTIL Found OR (RangeStart > RangeEnd); END ELSE BEGIN AlrtDialog('Error : Bad range value'); END; Found:=False; END; Procedure HOffsetReturn(WSName:STRING;baseRow,targetCol:INTEGER;retFormula:BOOLEAN;VAR targetValue:STRING); VAR SSHd:HANDLE; hasFormula:BOOLEAN; BEGIN SSHd:=GetObject(WSName); hasFormula:=CellHasNum(SSHd,baseRow,targetCol); IF hasFormula AND NOT retFormula THEN BEGIN targetValue:=Num2Str(2,GetCellNum(SSHd,baseRow,targetCol)); END ELSE BEGIN targetValue:=GetCellStr(SSHd,baseRow,targetCol); END; END; Procedure VSeek(WSName,MatchString:STRING; LookupCol,RangeStart,RangeEnd,TargetCol:INTEGER;VAR targetValue:STRING); VAR totalRows,totalCols:INTEGER; SSHd:HANDLE; CellVal:STRING; Found,Stop:BOOLEAN; Function BoundsChk(Rows,Cols,RStart,REnd,LCol,TCol:INTEGER):BOOLEAN; VAR errorFound:BOOLEAN; BEGIN IF (RStart <= 0) OR (RStart > Rows) OR (REnd > Rows) OR (RStart >= REnd) OR (LCol <= 0) OR (TCol <= 0) OR (LCol>Cols) OR (TCol>Cols) THEN BEGIN errorFound:=True; END ELSE BEGIN errorFound:=False; END; BoundsChk:=errorFound; END; BEGIN SSHd:=GetObject(WSName); SprdSize(SSHd,totalRows,totalCols); Stop:=BoundsChk(totalRows,totalCols,RangeStart,RangeEnd,LookupCol,TargetCol); IF NOT Stop THEN BEGIN REPEAT CellVal:=GetCellStr(SSHd,RangeStart,LookupCol); IF Pos(MatchStr,CellVal) <> 0 THEN BEGIN targetValue:=GetCellStr(SSHd,RangeStart,TargetCol); Found:=True; END ELSE BEGIN RangeStart:=RangeStart+1; IF RangeStart > RangeEnd THEN BEGIN Found:=True; AlrtDialog('Error: Value not found'); END; END; UNTIL Found OR (RangeStart > RangeEnd); END ELSE BEGIN AlrtDialog('Error : Bad range value'); END; END;