Hans Gustav: mysql2excel & excel2mysql

Hallo,

Ich hab im Archiv schon ein wenig stoff gefunden jedoch sind noch ein paar fragen offen:

im archiv steht ein komplettes mysql2excel script, jedoch erzeugt dieses script nur eine ausgabe in der excel form durch den Content-Type: application/vnd.ms-excel. Kann ich diese datei auch mit PHP auf dem Server ablegen?, zb. mittels CronJob, so das alle mysql tabellen die in der datei "export.txt" oder so aufgeführt werden als Excel datei im Ordner "/excel" abgespeichert werden.
Bzw. Wie ist das abspeichern/erzeugen überhaupt möglich?

dann habe ich kein PHP-SAcript gefunden was eine Excel Tabelle in eine MySQL Tabelle einlesen kann geschweige denn mit welcher Funktion das ginge.

MfG
Hans Gustav

  1. Moin!

    dann habe ich kein PHP-SAcript gefunden was eine Excel Tabelle in eine MySQL Tabelle einlesen kann geschweige denn mit welcher Funktion das ginge.

    Excel kann CSV (comma separaraded values) lesen und schreiben. Voraussetzung ist, das die CSV's intern wie folgt aussehen:

    1 Datensatz eine Zeile (das ist eigentlich klar.
    Trenner: Seminkolon (';')
    Text in Anführungsstrichen.

    MySQL kann genau das auch wieder importieren. Bei der Benutzung einer  Skriptsparche (PHP oder Perl) kann man auch die CSV- Datei einlesen, die INSERT- Befehle selber bauen und in der für die Skriptsprache typischen Art übergeben an MySQL übergeben.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Meinereinerselbst ist auf der Suche nach Aufträgen
    1. Es besteht nachwievor die Frage: WIE?

      MfG
      Hans Gustav

      1. Moin!

        Es besteht nachwievor die Frage: WIE?

        Ja. Wie? Einfach, einfach, einfach!
        In Excel "Speichern unter", Dateityp CSV wählen.
        Datei via FTP auf den Server.

        Nun entweder mit dem MySQL- Import- Befehl einlesen (Falls man Telent/SSH- Zugang hat

        ODER:

        Datei in PHP öffnen, am Zeilenende splitten, danach am ';' splitten,
        danach trimmen (Leerzeichen entfernen), mittels Regex führende und abschließenede '"' entfernen, Zeilenweise SQLStrings bauen und einlesen. (INSERT INTO...)

        Das ist hier SELFHTML und nicht GETSCRIPT. Die Funktionen sind im einzelnen trivial und gut im Manual von PHP und MySQL dokumentiert.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Meinereinerselbst ist auf der Suche nach Aufträgen
        1. Bitte den nächsten block ganz langsam lesen:
          Wie Schon erwähnt soll das >> Per Cronjob << passieren!, sprich Automatisch -> Automatisch != Händisch, Händisch wäre es aber, wenn ich Händisch "Speichern Unter" ANKLICKEN müsste.

          Also mit welchen PHP Funktionen kann ich eine Excel Tabelle in eine MySQL Tabelle einlesen. fgetcsv() sagt mir leider nicht viel und bringt mich auch nicht weiter auf php.net

          Ich würde mich über einen code-ansatz freuen.

          und dann war da noch ne andere frage: wie lege ich eine mysql tabelle auf dem server als *.xls datei ab?

          Mit freundlichen Grüßen
          Hans Gustav

          1. Moin!

            Bitte den nächsten block ganz langsam lesen:
            Wie Schon erwähnt soll das >> Per Cronjob << passieren!

            Die gibt mir die Information, auf dem Server ist Linux/ Unix als Dateisystem.

            Also mit welchen PHP Funktionen kann ich eine Excel Tabelle in eine MySQL Tabelle einlesen.

            Mit keinem einzigen. Sie muss zuvor exportiert und dann gemäß meines Rezeptes behandelt werden.

            fgetcsv() sagt mir leider nicht viel und bringt mich auch nicht weiter auf php.net

            fgetcsv ist eine Abkürzung des von mir genannten Weges.

            Ich würde mich über einen code-ansatz freuen.

            Warum? Das öffnen, lesen, splitten und die Behandlung sind so trivial, das der der das nicht kann, auch das Skript nicht anpassen kann, das ich hierfür mühsam zusammenschreibe. Warum also? In solchen Fällen biete ich meine Hilfe gegen bares an. Ich lebe davon. In der Autowerkstatt gibts auch nicht kostenlose Hebebühnenbenutzung + Verbrauchsmaterial + Anleitung. Hier gibts die Anleitung kostenlos.

            und dann war da noch ne andere frage: wie lege ich eine mysql tabelle auf dem server als *.xls datei ab?

            Da fällt mir spontan ein: NFS Freigabe auf dem Server, unter Windows NFS client installieren und konfigurieren ODER Samba auf dem Server installiern und konfigurieren unter Windows die "Netzwerkfreigabe" benutzen ODER eben: FTP ODER man schreibe sich ein Formular/Skript um die Datei hochzuladen ODER benutzen der mysqlimport Funktion an der Konsole. Dazu muss ein MySQL Client unter Windows installiert und der MySQL-Server erreichbar sein. Möglich wäre es dann auch was über ODBC zu machen.

            Hier braucht es einen genauen Einblick in die bestehenden Möglichkeiten oder Einschränkungen. Ich habe auch keinen Bock erst 24689 Zeilen Skript zu schreiben, die diese universell herausfinden.

            Das Ablegen der Excel Datei im XLS- Format auf dem Server macht keinen Sinn. Schuld ist Mickisoft und dessen Geheimniskrämerei bei den Dateiformaten.

            Excel und MySQL sind nicht dafür gemacht miteinander Daten zu tauschen. Excel kann zum Beispiel nur Tabellen mit max. ~64536 Zeilen verwalten.

            Cronjob: Wecker stellen

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Meinereinerselbst ist auf der Suche nach Aufträgen
            1. Ok ich versuche die frage zu verinfachen:

              angenommen ich hab auf meinem server eine excel datei wo das feld A1 mit dem text "A1" belegt ist und das feld A2 mit "A2", B1 "B1" und B2 genau so ;-)

              also

              A1 B1
              A2 B2

              so sieht die tabelle aus. wie lese ich die excel tabelle nun (von mir aus) in eine txt datei aus oder in sonst irgend ein format womit ich es dann anschließend in die mysql tabelle schieben kann.

              die txt datei sollte dann als trennzeichen (ach mir ist das trennzeichen egal) von mir aus sollte so die txt datei aussehen:

              A1;B1
              A2;B2

              geht das?

              MfG
              Hans Gustav

              1. hi,

                A1;B1
                A2;B2
                [...] so sieht die tabelle aus. wie lese ich die excel tabelle nun (von mir aus) in eine txt datei aus oder in sonst irgend ein format womit ich es dann anschließend in die mysql tabelle schieben kann.

                mit file() liest du die datei zeilenweise in ein array ein.
                mit explode() kannst du jede dieser zeilen weiderum am trennzeichen aufsplitten.
                daraus bastelst du dir mit hilfe der üblichen string-operationen jetzt dein INSERT-statement für die DB zusammen, und führst dieses dann mit mysql_query() aus.

                gruss,
                wahsaga

                1. Hast du noch was vergessen oder war dsas dein ernst

                  [Leider musste der hier gepostete Inhalt einer Binär-Datei gelöscht werden, da er Zeichen enthielt, die in UTF-8 nicht darstellbar sind. Anm. d. Red.]

                  da ist nichmal ein anzeichen von A1 A2 oder B1 B2

                  MfG
                  Hans GUstav

                  1. hi,

                    Hast du noch was vergessen oder war dsas dein ernst
                    [Leider musste der hier gepostete Inhalt einer Binär-Datei gelöscht werden, da er Zeichen enthielt, die in UTF-8 nicht darstellbar sind. Anm. d. Red.]
                    da ist nichmal ein anzeichen von A1 A2 oder B1 B2

                    wo bitte hast du das zeichenwirrwarr da oben denn jetzt her?

                    gruss,
                    wahsaga

                    1. wo bitte hast du das zeichenwirrwarr da oben denn jetzt her?

                      Aus einer .xls Datei

                      1. hi,

                        wo bitte hast du das zeichenwirrwarr da oben denn jetzt her?
                        Aus einer .xls Datei

                        ach so.

                        du musst nicht alles in einen topf werfen.
                        .xls und .csv sind zwei extrem verschiedene formate ...

                        gruss,
                        wahsaga

              2. Moin!

                Speichern von Excel Dateien als CSV:

                Entweder von Hand, oder Excel- Makro. Dazu empfiehlt sich ein Handbuch über VBA oder Mit [ALT+F11] ein Blick auf die Entwicklungsumgebung. (Visual Basic for Applications). Das Makro lässt sich nicht aufzeichnen, es muss geschrieben werden, weil der kleine Mann, der es beim Aufzeichnen in die Steintafeln hämmert, Pause macht, wenn ein Dialogfenster geöffnet wird.

                Die resultierende Datei muss irgendwie auf den Server. Anzahl der verschiedenen Möglichkeiten: 894232 (nur eine Auswahl..., "leider gehen nicht alle immer")

                dann wieder mein Rezept oder:

                Wie mit fgetcsv eine Datei gelesen wird steht in http://www.selfphp.info/funktionsreferenz/dateisystem_funktionen/fgetcsv.php

                Dann einen SQL: Befehl bauen:
                $sql="INSERT INTO Datentabelle (Spalte1,Spalte2) VALUES ('Wert1','Wert2')";

                Dann Datenbank connekten:

                /* Datenbankserver - In der Regel die IP */
                  $db_server = "localhost";

                /* Datenbankname */
                  $db_name = "selfphp";

                /* Datenbankuser */
                  $db_user = "root";

                /* Datenbankpasswort */
                  $db_passwort = "mega";

                /* Erstellt Connect zu Datenbank her */
                  $conn = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);

                Dann Eintragen und Fehlerbehandlung:
                $result = mysql_query($sql,$conn) OR die(echo "$sql:<br>".mysql_error());

                Nachbehandlung:
                mysql_free_result($result);
                mysql_close($conn);

                Das war's. Die Funktionen sind an gleicher Stelle beschrieben.

                Das ist dann ein Problem aus mindestens 3 Programmiersprachen, zwei Entwicklungsumgebungen, zwei Betriebssystemem hundert Wünschen.
                Also etwas, womit man sich im Beruf auseinandersetzt und auch davon Leben können sollte.

                MFFG (Mit freundlich- friedfertigem Grinsen)

                fastix®

                --
                Meinereinerselbst ist auf der Suche nach Aufträgen
                1. OK - Wie ich eine .CSV-datei auslese hab ich jetzt, aber jetzt brüchte ich noch ein script dass mir aus einer excel datei eine .csv-datei macht; einfach umbennennen geht ja nicht.

                  MfG
                  Hans Gustav

                  1. hi,

                    OK - Wie ich eine .CSV-datei auslese hab ich jetzt, aber jetzt brüchte ich noch ein script dass mir aus einer excel datei eine .csv-datei macht; einfach umbennennen geht ja nicht.

                    das excel-dateiformat ist kein offenes - was da drin wo stehen muss, weiss also eigentlich nur microsoft.

                    aber ein script zum umwandeln brauchst du ja auch gar nicht, da du mit dem programm excel die datei ja auch direkt als .csv abspeichern kannst - sorge also dafür, dass eben dies passiert.

                    gruss,
                    wahsaga

                  2. Moin!

                    OK - Wie ich eine .CSV-datei auslese hab ich jetzt, aber jetzt brüchte ich noch ein script dass mir aus einer excel datei eine .csv-datei macht; einfach umbennennen geht ja nicht.

                    Datei->Speichern unter -> Dateityp:CSV

                    Automatisieren geht nur mit VBA. Dafür gibt's extra Foren.
                    Ja, ich könnte es programmieren.
                    Nein ich will aber nicht.
                    Ja, ich wäre bestechlich. €400 pro Tag.

                    MFFG (Mit freundlich- friedfertigem Grinsen)

                    fastix®

                    --
                    Meinereinerselbst ist auf der Suche nach Aufträgen
                    1. Du musst dir vorstellen, dass ich 1000 Excel Tabellen habe und die in eine Datenbank uppen will. Alle haben das Format .xls.

                      Automatisieren geht nur mit VBA.

                      Was ist denn VBA? Visual Basic?

                      Kann es sein das Es 2 arten von VBA gibt, nämlich eine Speziell für Excel (das sind dann diese Makros, oder?)?!

                      Aber ich mag Makros nicht.

                      Also:

                      • Ich könnte mit PERL Excel-Tabellen ins TXT Format umwandeln (...)
                      • Ich könnte mit VBA (...) (...)
                      • (...)

                      Was tun? 400€ pro tag is n bissi krass. das würd ich nichtmal für das ganze programm nehmen.

                      MfG
                      Hans Gustav

                      1. Moin!

                        Du musst dir vorstellen, dass ich 1000 Excel Tabellen habe und die in eine Datenbank uppen will. Alle haben das Format .xls.
                        Was ist denn VBA? Visual Basic?

                        "Visual Basic for Applications" - Eine Skriptsprache, die syntaktisch ähnlich zu Visual Basic ist und im M$- Office "eingebaut" ist.

                        Kann es sein das Es 2 arten von VBA gibt, nämlich eine Speziell für Excel (das sind dann diese Makros, oder?)?!

                        s.o.

                        Aber ich mag Makros nicht.

                        Tja. Schon wieder Extrawunsch...

                        Also:

                        • Ich könnte mit PERL Excel-Tabellen ins TXT Format umwandeln

                        Theoretisch.

                        • Ich könnte mit VBA (...) (...)

                        Das selbe tun. Nur bequemer.

                        Was tun? 400&#65533; pro tag is n bissi krass. das würd ich nichtmal für das ganze programm nehmen.

                        Wer sagt, dass es einen Tag dauert?
                        Es lässt sich mit den Mitteln von VBA sogar ein Skript bauen, welches einen kompletten MySQL- Dump (Befehlsfolge) erzeugt, welche dann mit einem Perl- oder PHP- Skript kurzerhand in die DB eingelesen wird... Sehr bequem zu erledigen. Hinterher gibts in der Datenbank eine Datentabelle, die alle Excel- Values des Tabellenblattes enthält.
                        Aber auch diese Lösung erfordert jemanden, der Excel, VBA, PHP oder Perl sowie MySQL klarkommt. Das ist nicht mehr der Ferienjob für Schüler oder Praktikanten. In der Autowerkstatt wird das Geld komischerweise ohne zu murren bezahlt.

                        Selbst wenn die Programmierung dieses "Makros" einen Tag dauern sollte, dann ist das mit 400 Euro nicht zu teuer. Denke an die gesparte Arbeitszeit.

                        fastix®

                        MfG
                        Hans Gustav

                        MFFG (Mit freundlich- friedfertigem Grinsen)

                        fastix®

                        --
                        Meinereinerselbst ist auf der Suche nach Aufträgen
                        1. --
                          Meinereinerselbst ist auf der Suche nach Aufträgen

                          Wieviele Aufträge hast du durch das SelfForum schon bekommen?

                          MfG
                          Hans Gustav

                          1. Moin!

                            Wieviele Aufträge hast du durch das SelfForum schon bekommen?

                            Keine Ahnung. Wirklich nicht. Ich weiss, daß jemand, der hier Antworten gesucht hatte, letztlich über diverse Links hier, dann auf einer meiner Seiten bis zu jener Computerschule vorgedrungen ist, für die ich sehr oft arbeite, um dann ein Seminar zu buchen. Ich hatte auch schon mit einer Agentur zu tun, die eine kleine Lösung brauchte. Alle berichten aber nicht darüber und auch bei der Computerschule halte ich nicht alle Seminare. Ich gehe davon aus, daß ich es nicht immer erfahre.

                            Tatsache ist, daß ich hier schon einer Menge Leuten, die richtig Probleme hatten, aus der Patsche geholfen habe. Und warum sollte ich da nicht dokumentieren, daß ich mit meinen Wissen gern auch etwas verbindlicher zur Verfügung stehe?

                            Was jetzt Dein Problem betrifft: (Excel-> Datenbank) das ist wirklich sehr komplex, aber lösbar. Und es ist eben nichts für ein Forum. Warum habe ich oft genug gesagt. Außerdem fehlen immer noch eine Menge Informationen, allein die Fragen, die ich hätte, wenn ich es denn lösen sollte, würden den hier gegebenen Rahmen a) sprengen und b) wären die Antworten womöglich sicherheitsrelevant.

                            Aus meiner Sicht und mit dem Problem-Wissen, welches ich bis jetzt habe würde ich wohl eher sowas wie ein Excel- Addin- und (nicht unter allen Umständen nötig) ein Perl-Script programmieren. Heraus käme wohl eine Lösung, die die aktuelle Datentabelle mit einem einzigen Klick exportiert... Das ist auch das, was Du brauchst. Denn, so kommt es rüber: Perl ist nicht so Dein Ding, Excel kennst Du auch nicht gerade richtig perfekt, mit den Datenformaten hast Du nichts am Hut: Du willst etwas, das einfach nur funktioniert. Wie gesagt: das kannst Du haben. Aber eben nicht aus dem Forum, zumindest nicht für dieses komplexe Problem.

                            MFFG (Mit freundlich- friedfertigem Grinsen)

                            fastix®

                            --
                            Meinereinerselbst ist auf der Suche nach Aufträgen