如何用CSV数据填充HTML表

时间:2018-09-26 10:01:31

标签: javascript html-table import-from-csv

下表用于创建CSV,但是现在我想用另一种方法来完成整个操作。我想读取CSV并将数据(包括下拉值)传输到表格中。

此刻CSV数据已写入一个文本字段,该文本字段会进行小规模验证。

有人可以告诉我如何将CSV中的数据干净地放入表格中,并在那里进行验证吗?

这是jsfiddle:https://jsfiddle.net/dpgxk01o/12/

multiCapture.php

<form onkeypress="validate()">
    <div class="table-wrapper">
        <div class="table-scroll">
            <table id="myTable" border=1>
                <thead>
                <tr>
                    <th></th>
                    <th>Geschlecht*</th>
                    <th>Anrede*</th>
                    <th>Umgangsform*</th>
                    <th>Titel</th>
                    <th>Vorname*</th>
                    <th>Nachname*</th>
                    <th>E-Mail*</th>
                </tr>
                </thead>
                <tbody>
                <tr>
                    <td>
                        <p>
                            <label>
                                <input type="checkbox" name="chk"/>
                                <span></span>
                            </label>
                        </p>
                    </td>
                    <td>
                        <div class="input-field">
                            <div>
                                <select id="selectOption1" name="select1" class="browser-default genderSelect" required>
                                    <option selected>Bitte auswählen</option>
                                    <option value="m">Männlich</option>
                                    <option value="f">Weiblich</option>
                                </select>
                            </div>
                        </div>
                    </td>
                    <td>
                        <div class="input-field">
                            <div>
                                <select id="selectOption2" name="select2" class="browser-default gsAddress" required>
                                    <option selected>Bitte auswählen</option>
                                    <option class="m">Sehr geehrter</option>
                                    <option class="m">Werter</option>
                                    <option class="m">Lieber</option>
                                    <option class="f">Sehr geehrte</option>
                                    <option class="f">Werte</option>
                                    <option class="f">Liebe</option>
                                </select>
                            </div>
                        </div>
                    </td>
                    <td>
                        <div class="input-field">
                            <div>
                                <select id="selectOption3" name="select3" class="browser-default umgangsform" required>
                                    <option selected>Bitte auswählen</option>
                                    <option>Per Du</option>
                                    <option>Per Sie</option>
                                </select>
                            </div>
                        </div>
                    </td>
                    <td>
                        <input type="text" class="titel">
                    </td>
                    <td>
                        <input id="vorname" type="text" class="vorname validate" required>
                    </td>
                    <td>
                        <input type="text" class="nachname validate" required>
                    </td>
                    <td>
                        <input type="email" class="email validate" required>
                    </td>
                </tr>
                </tbody>
            </table>
            <p id="test">Empty</p>
        </div>
    </div>
    <br>
    <div class="row">
        <div class="col s12 m12 l12">
            <input type="button" id="makeNew" value="Empfänger hinzufügen">
            <input type="button" value="Empfänger löschen" onclick="deleteRow('myTable')"/>
            <button id="csvButton" class="right" onclick="csv()">Export to CSV</button>
        </div>
    </div>
    <div class="row">
        <div class="col s12 m12 l12">
            <p id="warning" class="right" style="margin-top: -15px; color: red;">Bitte füllen Sie alle
                Pflichtfelder aus</p>
        </div>
    </div>
</form>

<script>
    function csv() {

        const rows = [[geschlecht[0].value, anrede[0].value, umgangsform[0].value, titel[0].value, vorname[0].value, nachname[0].value, email[0].value]];
        var universalBOM = "\uFEFF";
        var csvContent = '';
        rows.forEach(function (rowArray) {
            let row = rowArray.join(";");
            csvContent += row + "\r\n";

            for (i = 1; i < titel.length; i++) {
                csvContent += geschlecht[i].value + ';' + anrede[i].value + ';' + umgangsform[i].value + ';' + titel[i].value + ';' + vorname[i].value + ';' + nachname[i].value + ';' + email[i].value + "\r\n";

            }

        });


        var link = document.createElement("a");
        link.setAttribute("href", "data:text/csv;utf-8," + encodeURIComponent(universalBOM + csvContent));
        link.setAttribute("download", "export.csv");
        document.body.appendChild(link); // Required for FF

        link.click(); // This will download the data file named "export.csv".

    }
</script>

eCard-NEW.php

<div class="collapsible-body">
    <div class="container" style="width: 90%;">
        <h5>Erfassen</h5>
        <div class="col s12 m12 l12">
            <?php include "multiCapture.php"; ?>
        </div>
    </div>
    <h2>CSV - Import</h2>
    <a class="modal-trigger" href="#modal1"><i class="material-icons" style="color: red;">info</i></a>
    <input type="file" id="files" name="file"/>
    <span class="readBytesButtons">
            <button type="button">Datei laden</button>
          </span>
    <p>Hier einen oder mehrere Empfänger eintragen</p>
    <textarea name="textareaMails" placeholder="m;Herr;Max;Mustermann;Prof.;max.mustermann@muster.ch" id="textareaMails"
              style="height: 300px; border:solid 1px gray; resize: none;"></textarea>
    <div>
        <button type="button" onclick="checkMailAdresses()" style="float: left; margin-right: 10px;">überprüfen</button>
        <p id="errorMail" style="color: red"></p>
    </div>
</div>

<script>
    //Liest ein csv-file ein und schreibt den Inhalt in die textarea
    function readBlob(opt_startByte, opt_stopByte) {

        var files = document.getElementById('files').files;
        if (!files.length || !((files[0].name).endsWith(".csv"))) {
            alert('Bitte eine .csv-Datei auswählen!');
            return;
        }

        var file = files[0];
        var start = parseInt(opt_startByte) || 0;
        var stop = parseInt(opt_stopByte) || file.size - 1;

        var reader = new FileReader();

        // If we use onloadend, we need to check the readyState.
        reader.onloadend = function (evt) {
            if (evt.target.readyState == FileReader.DONE) { // DONE == 2
                document.getElementById('textareaMails').value += evt.target.result;
            }
        };

        var blob = file.slice(start, stop + 1);
        reader.readAsText(blob, 'windows-1252');


    }

    document.querySelector('.readBytesButtons').addEventListener('click', function (evt) {

        if (evt.target.tagName.toLowerCase() == 'button') {
            var startByte = evt.target.getAttribute('data-startbyte');
            var endByte = evt.target.getAttribute('data-endbyte');
            readBlob(startByte, endByte);

        }
    }, false);


    //Überprüft ob das Format der Emailadressen der Empfänger stimmt
    function checkMailAdresses() {

        var area = document.getElementById('textareaMails').value.trim();

        if (area == false) {
            document.getElementById('errorMail').innerHTML = "Keine Daten eingetragen.";
            document.getElementById('textareaMails').style.border = "solid 1px gray";
            return false;
        }
        document.getElementById('errorMail').innerHTML = "";
        var lines = document.getElementById('textareaMails').value.split('\n');
        document.getElementById('errorMail').style.color = "red";
        for (var i = 0; i < lines.length; i++) {
            if (lines[i] === "") {

            } else {

                var temp = lines[i];
                var count = (temp.match(/;/g) || []).length;
                var partsOfStr = lines[i].split(';');
                document.getElementById('test').innerHTML = lines;

                //überprüft ob richtige Anzahl Attribute vorhanden

                if (count > 6) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Zu viele Attribute. Semikola sind nur zur Trennung von Attributen/Spalten erlaubt.";
                    document.getElementById('errorMail').style.foregroundColor = "red";

                    return false;


                }
                else if (count < 5) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": zu wenig Attribute/Spalten";
                    document.getElementById('errorMail').style.foregroundColor = "red";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }
                //überprüft das Geschlecht
                else if (partsOfStr[0] !== "m" && partsOfStr[0] !== "w") {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Das Geschlecht hat das falsches Format >" + partsOfStr[0] + "< \n nur m/w erlaubt.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;


                }
                //überprüft die Anrede
                else if (partsOfStr[1] === "") {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Die Anrede darf nicht leer sein.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }
                else if ((partsOfStr[1].length > 60)) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Die Anrede darf maximal 60 Zeichen beinhalten >" + partsOfStr[1] + "<.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }
                //Überprüft den Vornamen
                else if (partsOfStr[4] === "") {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Der Vorname darf nicht leer sein.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }
                else if ((partsOfStr[4].length > 60)) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Der Vorname darf maximal 60 Zeichen beinhalten >" + partsOfStr[2] + "<.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }

                //Überprüft den Nachnamen
                else if (partsOfStr[5] === "") {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Der Nachname darf nicht leer sein.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }
                else if ((partsOfStr[5].length > 60)) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Der Nachname darf maximal 60 Zeichen beinhalten >" + partsOfStr[3] + "<.";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }

                //Überprüft den Titel
                else if (partsOfStr[3] === "") {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Der Titel darf nicht leer sein.";


                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;

                }
                else if ((partsOfStr[3].length > 60)) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": Der Titel darf maximal 60 Zeichen beinhalten >" + partsOfStr[4] + "<.";


                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;

                }


                //Überprüft ob gültige Email    
                if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,5})+$/.test(partsOfStr[6]) == false) {
                    document.getElementById('errorMail').innerHTML = "Zeile " + (i + 1) + ": ungülte E-Mail >" + partsOfStr[6] + "<";
                    document.getElementById('textareaMails').style.border = "solid 2px red";
                    return false;
                }

            }

        }

        document.getElementById('errorMail').innerHTML = "Überprüfung erfolgreich";
        document.getElementById('errorMail').style.color = "green";
        document.getElementById('textareaMails').style.border = "solid 2px green";
        console.log("Send Formular");
        document.getElementById('sendForm').setAttribute('type', 'submit');
        document.getElementById('sendForm').submit();
    }

</script>

0 个答案:

没有答案