JavaScript Tabelle ohne leere Zellen erzeugen

-Rayz-

Lieutenant
Registriert
Okt. 2010
Beiträge
897
Guten Tag,

ich habe eine Tabelle in Form von einem Array welches Objekte beinhaltet. Soweit.. so normal.
Das Objekt selber hat als Attribute unter anderem "value" - ist dieses auf true gesetzt, gebe ich ein grünes X in der Tabelle aus. Andernfalls lass ich die Celle leer.
beispiel.JPG

Links in der Tabelle steht die Nummer vom Objekt.

Nun ist das Ziel, diese Tabelle als xls zu speichern ohne leere Zellen und überall, wo ein X drin steht, müsste die Nummer in die Spalte rutschen. Das Ergebnis sollte am Ende so aussehen:

beispiel_Ziel.JPG


Ich bastel da nun schon eine Weile dran rum aber stehe dennoch total aufm Schlauch.

Noch eine Randinformation, die Anzahl der Spalten und Zeilen ist dynamisch, sprich je nach vorherige Auswahl ändern sich der Header komplett.

Hier mal mein letzter Ansatz:

Javascript:
 auswertungen.forEach(auswertung => {
        const data = auswertung.data;
        const value = {};
        Object.keys(data)
          .forEach(col => {          
            if (col) {
              value[col] = auswertung.number;
            }
          });
        row.push(value);
      });
    
      const newTable = [];
      this.displayedMappedColumns.forEach(colHeader => {
        const newRowValue = {};
        const col = [];
        row.forEach(rowItem => {
          if (rowItem[colHeader]) {
            col.push(rowItem[colHeader]);
          }
        });
        newRowValue[colHeader] = col;
        newTable.push(newRowValue);
      });

Das Ergebnis dazu:

ergebnis.JPG


Allerdings bekomm ich mit dem Ergebnis keine Excel Liste hin.
Vielen dank schon mal.
 

Anhänge

  • beispiel.JPG
    beispiel.JPG
    25,3 KB · Aufrufe: 212
Ziel Tabelle als csv Datei speichern (string in Datei streamen)
csv Datei in Excel öffnen
 
ich kenne das Paket nicht, aber wenn es tut was es soll ajo.
ein weiteres Bsp. ist:
Code:
sText = "";
for (var i = 0; i < 10; i++)
   sText += Math.round(Math.random() * 100) + "\r\n";
oBlob = new Blob([ sText ], { type: "text/plain" });
if (window.navigator.msSaveBlob)
{
        window.navigator.msSaveBlob(oBlob, "Zahlen.txt");
}
 
Zuletzt bearbeitet:
Aber wie soll denn meine Ausgabe die ich nun habe als Stream in eine Datei geschrieben werden.
Header 1 - 9 müsste ja der Spaltennamen sein und der Inhalt unter dem Header aufgelistet werden.

Ich habe hier ja noch kein Ergebnis, womit ich eine Tabelle realisieren könnte.

Eine Excel Datei erstelle ich sonst mit xlsx und importiere dies in meine Angular compoment aber wie gesagt, mir fehlt ja überhaupt erstmal der richtige Aufbau.
Der Quellcode von mir soll ja nur das Problem aufzeigen + meine Gedankengänge. Ein nutzbares Ergebnis ist dieses allerdings nicht
 
Ich deute deine Aufgabe so, daß du die Tabelle in Excel anzeigen möchtest.
D.h. nicht daß man die Tabelle als xls übertragen muss. Die csv der Tabelle sähe ca. so aus:
Code:
Header1;Header2;
11337;11337;
11339;11338;
Man kann Tabellen natürlich auch via xls(x) übertragen, dafür habe ich aber kein Code snippet zur Hand.
 
Wird dein Script auf einem Node-Backend ausgeführt ?
 
ne, Laravel - also php bzw da wird nichts ausgeführt.. da bekomme ich nur die rohen Daten her.
In Angular bereite ich diese dann auf
 
@-Rayz-
ok... du hast geschrieben, dass dir im Prinzip der Aufbau noch fehlt....

Ich könnte dir PapaParse ans Herz legen, eine Front- und BackEnd-Libary die sich eben genau mit dem ver- und aufbereiten von Tabellendaten (csv) beschäftigt -> https://www.papaparse.com/docs#json-to-csv
einfach mal durchscrollen, funktioniert in beide Richtungen. Es gibt auch methods zum Lesen und (indirektem) Schreiben eines Streams.

Am bequemsten wäre ein kleine Node.JS Applikation, mit der du dann durch die built-in modules eine Datei in ein beliebiges Folder schreiben kannst, nachdem sie aufbereitet wurden. Die App könnte sich auch die Daten von deinem Server ziehen, über ein kleines Angular-Template kannst du sie ja dann im FrontEnd aufbereiten.
 
Zurück
Oben