Bevor ich da weiter probiere frage ich besser mal bei den Spezialisten nach. Vielleicht ist das ja ein sinnloses Unterfangen und ich lasse das sein und spare viel sinnlose Zeit. Ich möchte gerne Daten aus Scripten nach Excel transportieren. Habe gelesen, dass das in PHP eigentlich relativ einfach über das PHPExcel-Paket gehen müsste. Das muss aber irgendwie in die PHP-Umgebung eingebracht werden. Dazu sollte der composer dienen, den ich installieren wollte. Aber irgendwie gelingt mir das nicht. Bei dem Versuch über php -r „copy(‚https://getcomposer.org/installer‘, ‚composer-setup.php‘);“ diesen zu laden kommt die Meldung: -sh: php: not found
Mein System läuft auf einer Symbox. Scheinbar wird PHP nicht gefunden. Wo liegt denn PHP auf der Symbox?
Hast du dir mal unser Excel SDK angesehen?
Das ist zwar für’s Archiv, aber ich denke das kannst du in VBA auch anpassen und andere Dinge aus Symcon in dein Excel schön automatisiert zu bekommen: SDK (Excel) — IP-Symcon :: Automatisierungssoftware
paresy
Danke für die Info. Deine Antwort sagt mir, das war keine gute Idee mit dem PHPExcel
Vielleicht geht das aus irgendwelchen Gründen ja auch gar nicht. Ja ich schaue mir das mal an.
Ich lese einige Excel mit PHP in IP-Symcon aus. Dafür habe ich den Composer auf einer anderen Maschine laufen lassen und den vendor Ordner auf das IP-Symcon System in den Scripts Ordner kopiert. Das Script selbst sieht dann so aus:
/* Excel zu PHP*/
require './vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
$sheetnames = ['Tabelle1'];
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
Ah ja, hört sich gut an. Danke für den Tipp. Würde das auch auf der Symbox funktionieren?
Vermutlich schon. Dateien dann per SCP (winSCP) kopieren.
Ist auf jeden Fall einen Versuch wert. Ich kopiere also, so hab ich Dich verstanden, die PhpExcel Dateien nach dem Herunterladen, in das Script-Verzeichnis der Symbox. Ich werde berichten ob es funkt🤗
Du musst über compiser schon die Abhängigkeiten auch herunterladen und mit kopieren.
Super. Habe das gerade ausprobiert, funktioniert. Ich habe soeben meine erste kleine Excel Datei auf diese Weise beschrieben. Vielen Dank…
Eine Frage noch. Es gibt das Verzeichnis var/lib/symcon/scripts in welches ich die das vendor verzeichnis, die composer.json und die composer.lock kopiert habe. Es gibt aber auch ein Verzeichnis namens mnt/data/symcon/scripts. In diesem liegen die Dateien ebenfalls. Kannst Du mir das erklären?
wie versprochen hier meine Vorgehensweise…ohne jegliche Garantie, bei mir funktioniert das zumindest,…um die PHPSpreadsheet-Klasse auf der Symbox, über den Umweg der PHP-Installation auf meinem Windows-PC, zu installieren:
Sollte es Gründe geben die gegen diese Vorgehensweise sprechen, Paresy kann vielleicht mal draufschauen, dann bitte den Beitrag einfach löschen. Ich bin erst sehr kurz im Thema IP-Symcon…und überschaue sicherlich vieles noch nicht, sorry.
Schritt 1: Installation von Composer auf Windows
Composer von der Composer-Website herunterladen und installieren:
Umgebungsvariablen (Systemvariablen, Path) anpassen:
C:\ProgramData\ComposerSetup\bin
Überprüfen ob korrekt installiert:
Gebe „Composer“ auf der Systemconsole ein. Du solltest eine Ausgabe ähnlich der folgenden sehen:
Composer version 2.x.x 2021-xx-xx xx:xx:xx
Schritt 2: Installation von PHPSpreadsheet
Projektverzeichnis erstellen:
Erstelle ein neues Verzeichnis , z.B. C:\Muster_projekt.
Gehe in der Systemconsole zu diesem Verzeichnis
Composer initialisieren:
Führe den folgenden Befehl aus, um eine composer.json-Datei zu erstellen:
composer init
PHPSpreadsheet installieren:
Führe den folgenden Befehl aus, um PHPSpreadsheet zu installieren:
composer require phpoffice/phpspreadsheet
PHP.inianpassen:
Öffne die php.ini-Datei und gebe frei.
php.ini
extension=zip
extension=fileinfo
extension=gd
Schritt 3: Dateien auf die SymBox übertragen
Dateien kopieren:
Kopiere den vendor-Ordner sowie die composer.json- und composer.lock-Dateien in das Verzeichnis scripts der SymBox.
Schritt 4: Verwendung von PHPSpreadsheet in IP-Symcon
Klassenbeschreibung
Spreadsheet: Hauptklasse für das Erstellen und Bearbeiten von Tabellenblättern.
Reader: Klasse zum Lesen von Excel-Dateien.
Writer: Klasse zum Speichern von Excel-Dateien.
IOFactory: Zentrale Klasse zum Erstellen von Readern und Schreibern.
Hier ein kleines Beispielskript, das zeigt, wie man eine Excel-Datei öffnet, liest und beschreibt:
<?php require './vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Pfad zur vorhandenen Excel-Datei $filePath = __DIR__ . '/example.xlsx';//oder den gewünschten Pfad eingeben // Erstelle einen Reader und lade die Excel-Datei $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($filePath); // Greife auf das aktive Arbeitsblatt zu $sheet = $spreadsheet->getActiveSheet(); // Schreibe neue Daten in die Zellen $sheet->setCellValue('A2', 'New Data'); $sheet->setCellValue('B2', 'More Data'); // Speichere die Änderungen in der gleichen Datei $writer = new Xlsx($spreadsheet); $writer->save($filePath); echo "Datei aktualisiert: " . $filePath . "\n"; // Lade die Datei erneut $spreadsheet = $reader->load($filePath); // Greife auf das aktive Arbeitsblatt zu $sheet = $spreadsheet->getActiveSheet(); // Lese Daten aus den Zellen $cellValueA2 = $sheet->getCell('A2')->getValue(); $cellValueB2 = $sheet->getCell('B2')->getValue(); echo "Wert in A2: " . $cellValueA2 . "\n"; echo "Wert in B2: " . $cellValueB2 . "\n"; ?>bei der beschriebenen Vorgehensweise werden die Abhängigkeiten berücksichtigt
Nur mal so als Einwurf/Denkanstoß - ist natürlich keine vollständige XLS-Variante und beantwortet die Frage des TE nicht …
Wenn man Daten als CSV exportiert (egal, woher), kann die CSV-Datei ohne Probleme in EXCEL eingelesen werden. Mit relativ geringem Aufwand trennt man so die Daten von der Auwerte-Logik.
Ich nutze das z.B., um Daten meiner Bank-CSV via PHP erst umzuschreiben (z.B. Kategorien einzufügen oder auch den Text „user-friendly“ anzupassen). Im selben Rutsch nutze ich es sogar für meine Buchhaltung: Das Script schreibt gleich auch noch eine Datev-Buchungsstapel-Datei, die dem Steuerberater dann zugeht und massiv Arbeit reduziert.
Meine Vorgehensweise (allgemein formuliert) ist folgende:
(1) Excel Datei so aufbauen, dass eine Tabelle die Daten sind, und andere Tabelle(n) diese dann entsprechend aufbereiten/umwandeln/hochrechnen
(2) Scriptlauf (in IPS oder auf jeden Web-Server bzw. ggf. auch per Python) erzeugt CSV mit bestimmtem, immer gleichem Dateinamen, um das Datum erweitert
(3) Diese CSV öffne ich mit EXCEL (oder in meinem Falle mal mit Excel, mal mit LibreOffice Calc)
(4) Kopiere per (recht simplen) VB Script (das die Datumserweiterung der Datei aus einer Zelle nimmt) oder, bei manchen Sachen, wo das selten vorkommt, auch einfach per Hand, die CSV Daten in den Datenbereich der Excel Tabelle.
Der m.E. größte Vorteil ist, dass das eine relativ universelle Vorgehensweise ist, mit der man dieselben Daten ggf. auch in mehere Zielsysteme überführen kann (z.B. auch andere PHP-Systeme, Python etc.), man auch bei der Umgestaltung sehr flexibel ist, weil die Datenbasis (und das Script) nicht imgebaut werden muß.
Nachteil ist, dass man in Excel einen Button zum Import der Daten drücken muß.
Just my 2 cents
Sicherlich eine Alternative. Bei meiner Vorgehensweise hast Du halt sofort eine, von Symcon les- und beschreibbare, Excel Datei. Die Trennung von Daten und deren Verarbeitung kannst Du ja trotzdem vornehmen, ich arbeite zB mit unterschiedlichen Tabellenblättern. Formeln kannst Du doch in Excel auf dem separaten Tabellenblatt verwenden um die von Symcon gelieferten Daten des ersten Blattes zu bearbeiten. Alternativ hierzu kannst Du über die Excel Klasse sogar Formeln neu anlegen, ein ziemlich mächtiges Tool. Ich bin begeistert. Solltest Du eine csv benötigen, kannst Du diese über die Exel Tabelle jederzeit per Export erstellen