Detaillierte Erläuterung des Excel-Parsings und -Exports basierend auf Vue

Detaillierte Erläuterung des Excel-Parsings und -Exports basierend auf Vue

Vorwort

Als ich kürzlich die Geschäftsanforderungen für die tägliche Entwicklung geordnet habe, fiel mir zufällig das Parsen und Hochladen von Excel ein, was bei der Entwicklung recht häufig vorkommt. Lassen Sie uns das Wochenende nutzen, um es zu ordnen und zu lernen.

Grundlegende Einführung

Hauptsächlich basierend auf Vue+Element zur Implementierung von Dateianalyse und -export. Das verwendete Plug-In ist xlsx. Die spezifischen Methoden darin können Sie sich ansehen, wenn Sie interessiert sind. Der grundlegende Stil und die Konfiguration werden nicht wiederholt und es ist relativ einfach. Kommen wir direkt zum Grundnahrungsmittel

Code-Implementierung

Grundstruktur

Der Benutzer klickt auf den Datei-Upload und die Excel-Tabelle wird im JSON-Format auf der Seite angezeigt. Der Benutzer führt Vorgänge aus, überprüft die Daten und übermittelt sie an den Dienst. Der Upload-Vorgang verwendet die Upload-Komponente im Element

   <!-- Schaltfläche „Datei hochladen“ -->
   <div Klasse="Schaltflächenfeld">
     <el-hochladen
       Aktion
       akzeptieren=".xlsx, .xls"
       :auto-upload="false"
       :Dateiliste anzeigen="false"
       :bei-Änderung="Griff"
     >
       <el-button type="primary" slot="trigger">EXCEL-Datei auswählen</el-button>
     </el-upload>

     <el-button type="success" @click="submit" :disabled="disable">Daten sammeln und übermitteln</el-button>
   </div>

   <!-- Analysierte Daten-->
   <div Klasse="tableBox" v-show="anzeigen">
     <h3>
       <i Klasse="el-icon-info"></i>
       Meine Liebe, im Folgenden sind die Daten aufgeführt, die erfasst wurden. Nachdem Sie überprüft haben, dass sie korrekt sind, klicken Sie bitte auf die Schaltfläche „Gesammelte Daten übermitteln“, um sie auf den Server hochzuladen!
     </h3>

     <el-table :data="tempData" style="width: 100%" :height="Höhe" border>
       <el-table-column prop="name" label="Name" min-width="50%"></el-table-column>
       <el-table-column prop="phone" label="Telefon" min-width="50%"></el-table-column>
     </el-Tabelle>
   </div>

Analyse hochladen

Der hochgeladene Dateistream kann über die Upload-Komponente abgerufen werden (siehe Abbildung unten).

Konvertieren Sie den Dateistream in Binärdateien. Hier können wir die entsprechende Methode in der Utils-Datei hinzufügen (wie folgt)

// Lies die Datei im Binärformat export function readFile(file) {
    gib ein neues Versprechen zurück (Auflösen => {
        : Der Reader kann nicht mit anderen Dateien verbunden werden.
        reader.readAsBinaryString(Datei);
        reader.onload = ev => {
             lösen(ev.target.result);
        };
    });
 }

Konvertieren Sie Binärdateien über XLSX in JSON, damit sie angezeigt werden können

  //Daten in DATEI lesen (in JSON-Format konvertieren)
  let data = warte auf readFile(Datei);
  let workbook = xlsx.read(data, { type: "binary" }),
    Arbeitsblatt = Arbeitsmappe.Arbeitsblätter[Arbeitsmappe.Arbeitsblattnamen[0]];
  Daten = xlsx.utils.sheet_to_json(Arbeitsblatt);
  // Drucken Sie die Ergebnisse aus und fügen Sie die folgende Abbildung hinzu console.log(workbook);

Um die gelesenen Daten in Daten umzuwandeln, die an den Server weitergegeben werden können, müssen wir eine Zuordnungstabelle kapseln, die dem an das Backend weitergegebenen Format entspricht (wie unten gezeigt).

//Feldkorrespondenztabelle exportieren let character = {
        Name: {
            Text: "Name",
            Typ: "Zeichenfolge"
        },
        Telefon:
            Text: "Telefon",
            Typ: "Zeichenfolge"
        }
    };

Datenformate konvertieren

   sei arr = [];
    Daten.fürJeden(Element => {
        lass obj = {};
        für (let-Eingabezeichen) {
          wenn (!character.hasOwnProperty(Schlüssel)) brechen;
          sei v = Zeichen[Schlüssel],
            text = v.text,
            Typ = v.Typ;
          v = Element[Text] || "";
          Typ === "Zeichenfolge"? (v = Zeichenfolge(v)): null;
          Typ === "Zahl"? (v = Zahl(v)): null;
          obj[Schlüssel] = v;
        }
      arr.push(Objekt);
    });

An Server senden

Hier müssen wir prüfen, ob der Server das gemeinsame Senden mehrerer Dateien unterstützt. Wenn dies nicht möglich ist, kann unser Frontend die rekursive Sendemethode verwenden, um sie einzeln zu senden. Sie können unter bestimmten Umständen mit dem Backend kommunizieren. Wir verwenden hier eine rekursive Übertragung.

    //Daten an den Server senden async submit() {
      wenn (this.tempData.length <= 0) {
        diese.$nachricht({
          Meldung: "Mein Lieber, bitte wähle zuerst die EXCEL-Datei aus!",
          Typ: "Warnung",
          showClose: wahr
        });
        zurückkehren;
      }

      dies.deaktivieren = wahr;
      let loadingInstance = Wird geladen.service({
        Text: "Meine Liebe, bitte warte einen Moment. Ich arbeite sehr hart daran, damit fertig zu werden!",
        Hintergrund: "rgba(0,0,0,.5)"
      });

      // Was ist nach Abschluss zu tun? let complate = () => {
        diese.$nachricht({
          Nachricht: "Mein Lieber, ich habe die Daten für dich hochgeladen!",
          Typ: „Erfolg“,
          showClose: wahr
        });
        dies.show = falsch;
        dies.deaktivieren = falsch;
        wird geladenInstance.schließen();
      };

      // Die Daten müssen einzeln an den Server übergeben werden. let n = 0;
      lass send = async () => {
        wenn (n > this.tempData.length - 1) {
          // Alle bestanden complate();
          zurückkehren;
        }
        lass body = this.tempData[n];
        // Durch die Schnittstelle gehen let result = await createAPI(body);
        wenn (parseInt(Ergebniscode) === 0) {
          // Erfolg n++;
        }
        schicken();
      };
      schicken();
    }

Oben finden Sie eine Zusammenfassung der Analyse und des Hochladens von Excel-Dateien. Tatsächlich ist es nicht sehr schwierig. Dies sind die Unternehmen, die häufig an der täglichen Entwicklung beteiligt sind. Als Nächstes werfen wir einen Blick auf den Excel-Export.

Excel-Export

Grundstruktur

Sobald Sie die Seite aufrufen, holen Sie sich die gerade hochgeladene Datei, zeigen Sie sie in einer Tabelle an und erstellen Sie dann eine Seite ... Ich werde nicht darüber sprechen. Beginnen wir direkt mit dem Klicken auf die Schaltfläche „Excel exportieren“ und schauen uns zuerst die Seitenstruktur an

  <div Klasse="Container">
    <!-- Schaltfläche "Hochladen" -->
    <div Klasse="Schaltflächenfeld">
      <router-link zu="/upload">
        <el-tooltip content="EXCEL-Datensammlung" placement="top">
          <el-button type="primary" icon="el-icon-edit" kreis></el-button>
        </el-tooltip>
      </Router-Link>
    </div>

    <!-- Suchbereich -->
    <div Klasse="Suchfeld">
      <el-input v-model="search" placeholder="Fuzzy-Suche basierend auf Name und Mobiltelefon" @change="searchHandle"></el-input>
      <el-button type="success" @click="submit" :disabled="disabled">Ausgewählte Daten exportieren</el-button>
    </div>

    <!-- Listenbereich -->
    <div Klasse="tableBox">
      <el-Tabelle
        :data="Tabellendaten"
        :Höhe="Höhe"
        Stil="Breite: 100%"
        v-loading="wird geladen"
        element-loading-text="Meine Dame, ich arbeite hart am Laden …"
        @selection-change="AuswahlÄnderung"
      >
        <el-table-column Typ="Auswahl" Breite="50" Ausrichtung="Mitte"></el-table-column>
        <el-table-column prop="id" label="Nummer" min-width="10%"></el-table-column>
        <el-table-column prop="name" label="Name" min-width="20%"></el-table-column>
        <el-table-column prop="phone" label="Telefon" min-width="20%"></el-table-column>
        <el-table-column prop="time" label="Erstellungszeit" min-width="25%" :formatter="formatter"></el-table-column>
      </el-Tabelle>
    </div>

    <!-- Seitenbereich -->
    <div Klasse="SeitenBox">
      <el-pagination
        Hintergrund
        Auf einer einzelnen Seite ausblenden
        Layout = "Gesamt, Größen, Zurück, Pager, Weiter"
        :page-size="Seitengröße"
        :current-page="Seite"
        :gesamt="gesamt"
        @size-change="Größenänderung"
        @current-change="vorherigesNächstes"
        @prev-click="vorherigesNächstes"
        @next-click="vorherigesNächstes"
      ></el-pagination>
    </div>
  </div>

Nach Excel exportieren

Konvertieren Sie JSON-Daten in Blattdaten, erstellen Sie eine neue Tabelle, fügen Sie ein Blatt in die Tabelle ein und schreiben Sie die Datei mit der writeFile-Methode von xlsx in die Tabelle

    // Daten exportieren submit() {
      wenn (diese.Auswahlliste.Länge <= 0) {
        diese.$nachricht({
          Nachricht: "Mein Lieber, bitte wähle zuerst die Daten aus, die du exportieren möchtest!",
          Typ: "Warnung",
          showClose: wahr
        });
        zurückkehren;
      }

      dies.deaktiviert = wahr;
      let loadingInstance = Wird geladen.service({
        Text: „Meine Liebe, bitte warte einen Moment. Ich arbeite sehr hart daran, damit fertig zu werden …“,
        Hintergrund: "rgba(0,0,0,.5)"
      });

      lass arr = diese.Auswahlliste.map(item => {
        zurückkehren {
          Kennzeichnung: item.id,
          Name: Artikelname,
          Telefon: item.phone
        };
      });
      // JSON-Daten in Tabellendaten konvertieren let sheet = xslx.utils.json_to_sheet(arr),
      // Neue Tabelle erstellen book = xslx.utils.book_new();
      //Fügt ein Blatt in die Tabelle ein
      xslx.utils.book_append_sheet(Buch, Blatt, "Blatt1");
      // Schreiben Sie die Datei mit der Methode writeFile von xlsx xslx.writeFile(book, `user${new Date().getTime()}.xls`);

      wird geladenInstance.schließen();
      dies.deaktiviert = falsch;
    }

**Die oben genannten Vorgänge sind mit Excel verknüpft. Datei-Upload und -Analyse sind eine häufige Anforderung. Wenn Sie sich für das Hochladen großer Dateien und das Fortsetzen nach dem Ausschalten interessieren, können Sie meinen Artikel „Hochladen großer Dateien und Fortsetzen nach Haltepunkt“ lesen.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Implementierung von Excel-Analyse- und Exportfunktionen basierend auf Vue. Weitere relevante Inhalte zur Analyse und zum Export von Vue-Excel finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So exportieren Sie die vom Backend zurückgegebene Excel-Datei in das Vue-Frontend
  • Vue fordert die Backend-Schnittstelle zum Exportieren von Excel-Tabellen an
  • So verwenden Sie js-xlsx zum Exportieren von Excel in Vue
  • Vue kapselt die öffentliche Funktionsmethode zum Exportieren von Excel-Daten
  • Detaillierter Implementierungsplan für den Vue-Frontend-Export von Excel-Dateien
  • Fallstricke und Lösungen beim Excel-Export mit Vue

<<:  Probleme bei der Verwendung mehrerer einfacher und dreifacher Anführungszeichen in MySQL concat

>>:  So installieren und konfigurieren Sie das Orchestrierungstool Docker Compose in Docker.v19

Artikel empfehlen

MySQL verwendet UNIQUE, um das Einfügen nicht doppelter Daten zu implementieren

SQL UNIQUE-Einschränkung Die UNIQUE-Einschränkung...

Tutorial zu HTML-Tabellen-Tags (3): Breiten- und Höhenattribute WIDTH, HEIGHT

Standardmäßig werden Breite und Höhe der Tabelle ...

Beispieldemonstration der Vuex-Modularisierung und Namespaces

1. Zweck: Machen Sie den Code leichter wartbar un...

js, um einen einfachen Bild-Drag-Effekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

Über das Problem der dynamischen Spleißen der SRC-Bildadresse von img in Vue

Werfen wir einen Blick auf das dynamische Spleiße...

Diagramm des Installations- und Verwendungstutorials für MySQL 8.0.17

Vorne geschrieben In der Vergangenheit und in akt...

So verwenden Sie vw+rem für das mobile Layout

Verwenden Sie immer noch das flexible Rem-Layout?...

Warum wird in React nicht empfohlen, einen Index als Schlüssel zu verwenden?

1. Vergleichen Sie den alten virtuellen DOM mit d...

Detaillierte Erklärung verschiedener HTTP-Rückgabestatuscodes

Wenn an Ihren Server eine Anforderung zum Anzeige...

Backup zwischen MySQL-Datenbank und Oracle-Datenbank importieren

Importieren Sie die aus der Oracle-Datenbank expo...

So verwenden Sie Docker zum Bereitstellen eines Django-Technologie-Stack-Projekts

Mit der Popularität und Reife von Docker ist es a...

Vue.js implementiert eine Timeline-Funktion

In diesem Artikel wird der spezifische Code von V...