procedure Sensoren_suchen;
var i, iTemp: integer;
sTemp:
string;
DWResult: DWORD;
begin
// Wenn die Datenbank extern über Excel geöffnet ist dann wird sie geschlossen.
// wenn diese Datei nicht geschlossen wird, dann kommt es zu einer Exception!!!
if FindWindow('
XLMain','
Microsoft Excel - Sensoren.xls') <> 0
then
SendMessageTimeout(FindWindow('
XLMain','
Microsoft Excel - Sensoren.xls'), WM_CLOSE, 0, 0,
SMTO_ABORTIFHUNG
or SMTO_NORMAL, 5000, DWResult);
// Speicher für Excel, ExcelWorkbook und ExcelWorksheet allocieren
// Dies ist nötig, da sonst bei dem verbinden (connectTo) mit dem Workbook und
// Worksheet fehler auftreten
exc := TExcelApplication.Create(
Nil);
excWB := TExcelWorkbook.create(
Nil);
excWS := TExcelWorksheet.create(
Nil);
// vorhandener Exceldatei laden !!! wichtig !!! Die Anzahl der emtyParam ist Office-Versions abhängig
exc.Workbooks.Open('
D:\Tischsteuerung\Steuerungsprogramm Version 1.103\Sensoren.xls', emptyParam, emptyParam, emptyParam, emptyParam
, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam
, emptyParam, emptyParam, lcid);
// Excel soll NICHT angezeigt werden
exc.visible[lcid] := false;
// verbinden des Workbooks und des Worksheets mit der in der exc geladenen Datei
excWB.ConnectTo(exc.ActiveWorkbook);
excWS.ConnectTo(excWB.ActiveSheet
as ExcelWorksheet);
// Anzahl der Sensoren wird festgestellt
i := 1;
while trystrtoint(excWS.Cells.Item[i+1,1],iTemp)=true
do i:=i+1;
// Das dynamische Array in welchem sich die Daten für die Sensoren befinden,
// wird allociert
SetLength(Sensoren, i);
// Die Daten aus der Datei wird in das dafür vorgesehene Array geladen
for i := 0
to Length(Sensoren) - 2
do
begin
Sensoren[i].iNummer := strtoint(excWS.Cells.Item[i+2,1]);
Sensoren[i].sName := excWS.Cells.Item[i+2,2];
sTemp := excWS.Cells.Item[i+2,3];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].dKapillarlaenge := strtofloat(sTemp);
sTemp := excWS.Cells.Item[i+2,4];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].dSpleissBasis := strtofloat(sTemp);
sTemp := excWS.Cells.Item[i+2,5];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].dPos_Spleiss_re := strtofloat(sTemp);
sTemp := excWS.Cells.Item[i+2,6];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].dPos_Spleiss_li := strtofloat(sTemp);
sTemp := excWS.Cells.Item[i+2,7];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].dPos_Kapillarkante := strtofloat(sTemp);
sTemp := excWS.Cells.Item[i+2,8];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].iSpleißzeit := strtoint(sTemp);
sTemp := excWS.Cells.Item[i+2,5];
delete(sTemp,strLen(PAnsiChar(sTemp))-2,2);
Sensoren[i].dPos_Spleiss_re := strtofloat(sTemp);
end;
// Der für Excel geladene Speicher wird freigegeben
excWS.free;
excWB.free;
exc.Quit;
end;