Technischer Artikel

Auswertung von Ingenieurs-, Basis- und komplexen Funktionen in Delphi mit HotXLS

Die in Excel in die Kategorie "Engineering" gebündelten Funktionen decken Operationen ab, die für Geschäftsberichte selten, für SCADA-Datenprotokollierung, Netzwerkkonfigurations-Exporte und wissenschaftliche Instrumentierung jedoch unabdingbar sind. HotXLS wertet diese Funktionen nativ aus und ermöglicht es Delphi-Anwendungen, mit Hex-Dumps, Binärmasken und komplexen Fourier-Berechnungen umzugehen, ohne COM-Interoperabilität aufrufen oder benutzerdefinierte Pascal-Parser schreiben zu müssen

Um diese Funktionen in HotXLS auszuwerten, weisen Sie einer Zelle über Cell.Formula eine Formel zu und lesen dann deren Cell.AsFloat oder Cell.AsString, was die integrierte Berechnungs-Engine zwingt, das Ergebnis zu berechnen

Radix-Konvertierungen: BIN2DEC, HEX2BIN und Freunde

Basiskonvertierungen sind in der Low-Level-Datenanalyse allgegenwärtig. Die Engine unterstützt die gesamte [BASIS]2[BASIS]-Familie: BIN2DEC, BIN2HEX, BIN2OCT, DEC2BIN, DEC2HEX, DEC2OCT, HEX2BIN, HEX2DEC, HEX2OCT, OCT2BIN, OCT2DEC und OCT2HEX

Book.ActiveSheet.CellC[1, 1].Formula := 'HEX2BIN("F1")';
// Returns "11110001" as a string
ResultStr := Book.ActiveSheet.CellC[1, 1].AsString;

Diese Funktionen nehmen optional ein zweites Argument auf: die Mindestanzahl an Zeichen für die Ausgabe, aufgefüllt mit führenden Nullen. Dies ist nützlich für die Ausrichtung von MAC-Adressen oder Register-Dumps

Book.ActiveSheet.CellC[1, 2].Formula := 'DEC2HEX(10, 4)';
// Returns "000A"
ResultStr := Book.ActiveSheet.CellC[1, 2].AsString;

Ein entscheidendes Detail, das in der Engine (genau wie in Excel) nachgeahmt wird, ist die Behandlung von vorzeichenbehafteten Binär- und Hex-Zahlen im Zweierkomplement. HEX2DEC("FFFFFFFF") ergibt nicht 4294967295; es ergibt -1, da 10-stellige Hex-Strings (und 10-Bit-Binärstrings) als vorzeichenbehaftet behandelt werden. Wenn Sie vorzeichenlose 32-Bit-Darstellungen berechnen, weichen diese Funktionen möglicherweise vom Verhalten von Delphis StrToInt('$FFFFFFFF') ab

Bitweise Operationen

Für Sensorstatusregister oder IPv4-Subnetzberechnungen sind bitweise Funktionen erforderlich. Die HotXLS-Engine unterstützt BITAND, BITOR, BITXOR, BITLSHIFT und BITRSHIFT. Diese operieren auf nicht-negativen Zahlen bis zu $2^{48}-1$

Book.ActiveSheet.CellC[1, 3].Formula := 'BITAND(13, 25)'; // 1101 & 11001 = 1001 (9)
ResultFloat := Book.ActiveSheet.CellC[1, 3].AsFloat;     // Returns 9.0

Da diese innerhalb der Berechnungs-Engine operieren, können Sie maskierte Status-Flags verketten: =IF(BITAND(A1, 4), "Sensor Fault", "OK"). Dies wird direkt in HotXLS ohne jeglichen umgebenden Delphi-Code ausgewertet

Komplexe Zahlen

Excel stellt komplexe Zahlen als formatierte Strings dar, typischerweise als "a+bi" oder "a+bj". Die Berechnungs-Engine parst und berechnet diese über die IM-Familie (Imaginary) nativ, wodurch Sie den mit Elektrotechnik-Blättern verbundenen Parse-Overhead vermeiden

// Create a complex number from real and imaginary coefficients
Book.ActiveSheet.CellC[1, 4].Formula := 'COMPLEX(3, 4, "i")'; 
// Returns "3+4i"

// Sum two complex numbers
Book.ActiveSheet.CellC[1, 5].Formula := 'IMSUM("3+4i", "5-2i")';
// Returns "8+2i"

// Find the absolute value (magnitude) of a complex number
Book.ActiveSheet.CellC[1, 6].Formula := 'IMABS("3+4i")';
// Returns 5.0 (sqrt(3^2 + 4^2))

Die unterstützten Operationen umfassen die Arithmetik (IMSUM, IMSUB, IMPRODUCT, IMDIV), Konjugation (IMCONJUGATE), Polar-/Kartesisch-Konvertierung (IMABS, IMARGUMENT, COMPLEX) und fortgeschrittene Mathematik (IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMSQRT). Darüber hinaus werden die trigonometrischen Funktionen IMSIN, IMCOS, IMTAN, IMSEC, IMCSC und IMCOT vollständig ausgewertet

Beachten Sie, dass, da das Ergebnis oft eine komplexe Zahl ist, Sie es über AsString und nicht über AsFloat auslesen. Der Versuch, eine Formel, die in "3+4i" resultiert, als Float zu lesen, wird die Standard-Fehlerbehandlung für Typumwandlungen auslösen

Bessel-Funktionen und Einheitenumrechnung

Für physikalische und mechanische Konstruktions-Arbeitsblätter unterstützt die Engine die Bessel-Funktionen erster und zweiter Art (BESSELJ, BESSELY) sowie die modifizierten Funktionen (BESSELI, BESSELK)

Die allgemeine Funktion CONVERT(number, from_unit, to_unit) ist ebenfalls mit der vollständigen Excels-Einheiten-Tabelle für Entfernung, Zeit, Druck, Kraft, Energie, Leistung, Magnetismus, Temperatur und Flüssigkeitsmaß (einschließlich aller metrischen Präfixe) implementiert. Dies ermöglicht Konstruktionsblättern eine direkte Standardisierung der Eingaben (z. B. =CONVERT(A1, "lbm", "kg")), die sofort von HotXLS aufgelöst wird, bevor der Delphi-Code die verarbeiteten Daten liest