Excel Sheet aus SQL Datenbank erstellen

  • Du brauchst keine neue Tabelle!

    Wenn Du in der Lage bist eine Tabelle entsprechend dem gewünschten Ergebnis aufzubauen und zu füllen, basiert das ganze auf einer SQL-Query.

    Das Ergebnis der SQL-Query kannst Du auch gleich in eine CSV schreiben, anstatt in eine neue Tabelle.


    Die Query kann nur auf den Daten der bereits gegebenen Tabellen resultieren, vermutlich liegt Dein Problem bei der Query?

    Am einfachsten ist es dann wohl, wenn Du mal Deinen DB-Aufbau inkl. Beispiel-Daten zeist und was die CSV am Ende davon beinhalten soll.


    Ich denke es wird eine relativ einfache Lösung geben.

  • Alles klar.


    DB Aufbau kann man sich vorstellen, wie eine riesen Excel Datei mit mehreren Tabellenblättern. Jeder Geschäftsbereich hat ein eigenes Tabellenblatt. Dort sind verschiedene Spalten mit bereichsspezifischen Inhalten.

    Die DB beruht auf der genannten riesigen Excel Datei die wir mittels perl Skript immer wieder in die SQL Datenbank jede Nacht hochladen. Wenn ich in HeidiSQL mit dir Datenbank anschau, sieht es genauso aus wie die Excel Liste. Ich kann die Tabellenblätter wählen und dort die jeweiligen Daten sehen.


    Folgende Beispielquery wird verwendet

    PHP
    1. $query_excel = "SELECT * FROM Bereich 1 WHERE _display = 'x' ORDER BY Nummer ASC";


    und die Funktion zum Download sieht bei mir so aus:



    Die Überschriften werden nicht mit angezeigt und es ist auch nicht in der Spaltenform wie in der Datenbank..

    Danke für eure Hilfe

    Dateien

    • Datenbank.jpg

      (100,78 kB, 3 Mal heruntergeladen, zuletzt: )
    • Excel.jpg

      (121,81 kB, 3 Mal heruntergeladen, zuletzt: )
  • Excel weiß nichts mit Komma-Separierung anzufangen, solange man das nicht explizit sagt.


    Unter dem Ribbon Daten links den Eintrag Aus Text wählen. Dann die Datei suchen/öffnen; Ursprünglicher Datentyp: Getrennt; evtl. Codierung anpassen; Weiter klicken. Im nächsten Fenster das Trennzeichen wählen, in Deinem Fall Komma und in der Vorschau siehst Du dann unten schon, was passiert.

    Fertig stellen klicken und gut is.


    Wenn Du auf dem Rechner, auf dem Du Excel ausführst Verbindung zum DB-Server hast, kannst Du auch über Daten -> Neue Abfrage die Daten direkt einlesen.

    Dort hast Du sonst auch die Wahl, eine CSV direkt abzufragen, das hat den Vorteil, dass Du das nur einmal einstellen musst und die Datei beim Öffnen immer aktuell ist. Dann bräuchtest Du auch keinen Zugriff auf den DB-Server.

  • Okay danke.


    Klappt wunderbar die Vorgehensweise.


    Verbindung zum Server hat nur mein Team und ich aufn Rechner. Da das Portal aber firmenintern für jeden über das Intranet zugänglich ist, haben die nur die Verbindung über die Intranetseite. Also die zweite Möglichkeit fällt leider raus.


    Die erste Möglichkeit ist zwar zielführend, jedoch bin ich mir ziemlich sicher, dass es für die Leute zu umständlich ist, wenn die nach dem Download erst noch die Ansicht anpassen müssen. Kann ich das irgendwie vorher programmieren, dass es direkt als "saubere" Tabelle angezeigt wird, wie in SQL?


    Wenn nicht muss ich vl doch den Umweg über eine HTML-Tabelle machen, damit die Benutzer es gleich in der richtigen Ansicht haben..

  • Zweite Variante über Neue Abfrage:

    Dort hast Du sonst auch die Wahl, eine CSV direkt abzufragen, das hat den Vorteil, dass Du das nur einmal einstellen musst und die Datei beim Öffnen immer aktuell ist. Dann bräuchtest Du auch keinen Zugriff auf den DB-Server.

  • Ja das Einstellen, auch wenn's nur einmal gemacht werden muss, ist eben das Problem, dass die Leute "überfordern" wird. Ich muss denen die Tabelle fertig liefern.


    Ich denk ich werd dann jetzt ein neues php-File zusammen programmieren, in dem ich dann doch eine html Tabelle erzeuge, und über die Button die Datei einfach als Download versuch aufzurufen. Das ganze ist für den Benutzer dann "idiotensicher" und die müssen nichts mehr einstellen, wenn ich die html Tabelle runterladen lasse.


    Bzw. funktioniert das überhaupt, weil csv ist ja eben kommasepariert und die html Tabelle wird ja dann bestimmt auch über kommas getrennt?

  • Ich muss denen die Tabelle fertig liefern.

    Und das Problem dabei ist welches? Einmal erstellen, speichern, weitergeben.

    Ich gehe davon aus, dass die CSV für alle im selben Speicherort liegt? Aber selbst wenn nicht, ist das ein einmaliges Erstellen pro Benutzer.


    Kein großer Akt

  • Die Benutzer können spezifisch nach Ihrer Auswahl die Ergebnisliste filtern. Die sollen sie dann downloaden können. Das heißt die Excel-Tabelle sieht von Benutzer zu Benutzer unterschiedlich aus. Das ist keine fertige Tabelle sondern wird immer neu generiert, je nachdem was die eben auswählen. Die CSV wird ja dann noch generiert.

    Das einmalige Einstellen pro Benutzer stellt leider ein Problem dar. Wie gesagt, ich muss es leider hinbekommen, dass ohne Einstellungen sich die Leute über den Downloadbutton eine auswahlspezifische Exceltabelle runterladen können. Das einzige was immer gleich ist sind die Überschriften der Spalten.

  • m.scatello

    Hab mich nachdem des wsl nicht mehr supportet wird nicht damit befasst.. Hab auch keine Ahnung wie ich das einbauen soll.



    Code
    1. $data = array(
    2. 'Name' => 'Redmann',
    3. 'Sex' => 'male'
    4. );
    5. $excel = new EasyPHPExcel('My first Excel');
    6. $excel->setHeader(array_keys($data))
    7. ->addRow(array_values($data))
    8. ->save('example1.xlsx');

    So wies da ist, werden die Daten ja fest in des Array reingeschrieben. Bei mir ist des ja aber alles komplett dynamisch. Die Tabelle kann über 70 Zeilen haben, oder auch nur eine..

  • Ja und? Wenn du dich damit gerade mal 5 Minuten beschäftigt hast, wundert mich das nicht, dass das nicht klappt.


    Und ob die Daten aus einem Array kommen, oder aus der Datenbank, wo ist da der große Unterschied? Du solltest dich vielleicht mal etwas mehr mit der Materie beschäftigen.

  • Ich kann nur aus Erfahrungen mit PHPExcel sprechen, aber das war bei größeren Datenmengen so inperformant durch übermässige Resourcennutzung, dass ich mir weitere Klassen nicht angesehen habe. Die hier erwähnten mögen anders arbeiten und den Zweck Resourcen freundlich erfüllen, keine Ahnung.


    Muss der TE selbst wissen.


    EDIT:

    Ich sehe gerade, dass PHPSpreadsheet offiziell PHPExcel abgelöst hat. Wenn da nicht grundlegend was geändert wurde, wäre das aus meiner SIcht zumindest für große Datenmengen keine Empfehlung!

  • Des weiß ich nicht wo da der große Unterschied ist, weil ich die ganze Sache nie gelernt hab.

    Da hast du vollkommen Recht, dass ich mich mit der Excel Klasse gerade nur 5 Minuten beschäftigt hab. Mir ist das nur direkt aufgefallen, dass die da ein Array in dem Beispiel code "fest" reinschreiben und das in ne Excel Datei schreiben.


    Aber vielleicht führt deine Idee dann echt zum Erfolg, weil die HTML-Tabelle die gerade angezeigt wird ist bei mir ja auch ein Array, weil ich stoß die wie folgt an:

    PHP
    1. while ($line = mysqli_fetch_array($result_excel1, MYSQLI_ASSOC))


    Das heißt für mich ich bau jetzt mal des Array, also bei mir die Tabelle genauso auf wie es angezeigt werden soll, und versuch dann rauszufinden wie ich diese github Daten aufn Server bekomm, dass ich die Excelklasse verwenden kann :)


    Danke für den Einwand :)

  • Oh ok, Arnes Antwort hab ich jetzt erst gelesen nachdem ich meinen letzten Beitrag gepostet hab. Danke auch dir für den Hinweis. Dann wirds jetzt doch darauf hinauslaufen, dass ich die Tabelle trotzdem aufbau in einer externen php Datei.

    Die muss ich dann nur über den Downloadbutton in der ursprünglichen Datei aufrufen und dann wird hoffentlich die Tabelle in Excel direkt angezeigt :)


    Ich muss mich hier echt nochmal entschuldigen, dass ich soviel frag, und manche Sachen für euch Profis echt wirr klingen. Ich bin eben kompletter neuling und versuch mich so gut es geht "durchzukämpfen". Danke aufjedenfall für die ganzen Hilfen

  • Ich sehe gerade, dass PHPSpreadsheet offiziell PHPExcel abgelöst hat. Wenn da nicht grundlegend was geändert wurde, wäre das aus meiner SIcht zumindest für große Datenmengen keine Empfehlung!

    Getestet habe ich mit PHPSpreadsheet bisher nicht, die Vorgängerversion hatte ich mal im Einsatz. Da ging es aber nur um ca. 500 Datensätze a. 20 Spalten, dabei gab es keine Performance-Probleme

  • Guten Morgen Zusammen,


    ich bin jetzt schon ziemlich weit gekommen, mit der Idee den HTML Table zu bauen. Hab unter der ursprünglichen Ergebnisliste (die ja anders aussieht als es in Excel sein soll) einen Button hinzugefügt, mit dem ich meine neue php Datei aufrufe. In der neuen PHP Datei hab ich dann mir nen Table zusammengebaut, der auch genauso aussieht wie es jetzt in Excel aussehen soll.


    Anschließend hab ich im Internet noch etwas sehr nützliches gefunden, mit ein paar wenigen Codezeilen wird die neue php Datei direkt zum "Downloadobjekt".

    Danach folgt ganz normal der Aufbau des Tabels.


    Und siehe da, mit diesen wenigen Codezeilen wird wirklich dann die datei im xls Format heruntergeladen und lässt sich auch mit Excel öffnen. Die Datei sieht nun schon deutlich schöner aus als die alte im csv Format. Jedoch passt auch hier die Formatierung nicht richtig. Der schreibt die ganzen header und ein paar informationen die schon in den Datenzellen stehen in die 1. Zelle und wechselt danach willkürlich in weitere Zellen nach unten.


    Weiß jemand, ob man da den Table anders designen muss, dass die Aufteilung der Zeilen und Spalten übernommen wird?


    Edit: Das Spreadsheet hab ich mir auch mal näher angeschaut. Hier scheitert es bei mir schon bei der Installation von dem composer den man dazu braucht, weil ich gar keine php.exe hab. Ich arbeite hier mit ner lokalen Entwicklungsumgebung mit XAMPP und dann kann ich diesen composer nicht mit php verbinden.


    Und ich glaub ich müsste im head bereich noch irgendwie deklarieren, dass die html Tabelle kein text ist sondern eben eine Tabelle.. gibts hierfür etwas? Weil der Datenexport funktioniert ja optimal, nur es wird als Fließtext mit willkürlicher Zeilenaufteilung ausgegeben

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Bodaggnmo ()

  • Lösung gefunden, kann mir zwar nicht erklären warum aber es funktioniert.



    Diese beiden Zeilen bewirken, warum auch immer, dass die Tabelle richtig angezeigt wird, nachdem man eine Leerzeile hat. Ich hab gedacht nachdem vieles in einer Zelle steht, dass ich vielleicht mehrere Tabellen brauch. Und nachdem ich rumprobiert hab gings aufeinmal mit dieser einen Zeile.


    Danke für eure Hilfe, denk das was ich da rausgefunden hab ist die schnellste Lösung um eine HTML Tabelle in Excel zu exportieren.


    Edit: Naja bisschen zu früh gefreut, funktioniert nur mit Microsoft Edge

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Bodaggnmo ()

  • Und sonst einfach mal eine XLSX entpacken und einen Blick reinwerfen.

    Die meisten Definitionen kann man 1:1 übernehmen, nur die workbooks.xml ud sheets.xml sind hauptsächlich interessant.


    Dürfte gar nicht sooo schwer sein, daraus eine eigene .xlsx zusammenzusetzen.