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

Detaillierte Erklärung der Verwendung von SetUp- und Reactive-Funktionen in Vue3

1. Wann soll setUp ausgeführt werden? Wir alle wi...

Detaillierte Erklärung der Mixins in Vue.js

Mixins stellen auf flexible Weise verteilte, wied...

Vue implementiert die Produktregisterkarte der Produktdetailseitenfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Next.js – Erste Schritte-Tutorial

Inhaltsverzeichnis Einführung Erstellen eines Nex...

Vue/React-Einzelseitenanwendung zurück ohne Aktualisierungslösung

Inhaltsverzeichnis Einführung Warum die Mühe? Com...

Codebeispiele für die Sicherung mehrerer MySQL-Datenbanken

In diesem Artikel werden hauptsächlich Codebeispi...

Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7

Vorwort Vor Kurzem wurde ein Teil der Geschäftstä...

Eine benutzerfreundliche Alternative in Linux (Befehl fd)

Der Befehl fd bietet eine einfache und unkomplizi...

Detaillierte Erklärung der Zeit- und Datumsverarbeitung von moment.js

Konvertierung des Zeitformats von Montag auf Sonn...

So implementieren Sie vertikale Textausrichtung mit CSS (Zusammenfassung)

Die Standardanordnung von Text in HTML ist horizo...

Detaillierte Einführung in den MySQL-Datenbankindex

Inhaltsverzeichnis Mindmap Einfaches Verständnis ...

Bringen Sie Ihnen bei, wie Sie ein React+Antd-Projekt von Grund auf erstellen

Bei den vorherigen Artikeln handelte es sich um m...