Datatables - Export - filename (Buttons v3.2.1)

k3nguruh

Erfahrenes Mitglied
Hallo,

ich habe mal wieder ein Problem mit Datatables. Ich möchte gerne bei einem Export (csvHtml5, excelHtml5, pdfHtml5) das der Dateiname dynamisch erzeugt wird. Leider habe ich keinen Plan, wie man an die <table> kommt. Die Tabelle hat eine Attribut [data-title], wenn das angegeben ist, soll daraus der Dateiname erstellt werden + ein Datum.

Das alles soll in $.extend(true, $.fn.dataTable.defaults, {}); stattfinden, damit man es nicht immer angeben muss.

Javascript:
buttons: {
  buttons: [
    {
      extend: "csvHtml5",
      text: "CSV - Datei",
      bom: true,
      exportOptions: {
        columns: ":visible:not(.dt-no-export)",
        orthogonal: "export",
      },

      // HIER GEHT ES LOS
      filename: function () {
        // Zugriff auf die aktuelle Tabelle
        const table = "????"; // <= HIER FEHLT ETWAS

        // data-title auslesen und aktuelles Datum und Zeit erstellen
        const title = $(table).data("title") || "Export";
        const formattedDateTime = moment().format("YYYY-MM-DD_HH-mm-ss");

        return `${title}_${formattedDateTime}`;
      },
    },
  ]
}

Vll. kann mir ja jemand helfen.
 
Zuletzt bearbeitet:
Hallo,

jepp, scheinbar falsch verstanden.

Es soll in den Standard Einstellungen $.extend(true, $.fn.dataTable.defaults, {}); eingetragen werden. Der Name der Tabelle ist also nicht bekannt. Er muss irgendwie aus DataTables ausgelesen werden. DataTables weiss ja welche Instance auf welche Tabelle angewandt wurde.
 
Hallo,

Nach langem Suchen / Belesen habe ich es hinbekommen. Hier die Lösung, falls einer auf das gleiche Problem stoßen sollte.

Da in der Beschreibung zum Filename nur gesagt wird, dass man einen String oder eine Funktion angeben kann, habe ich der Funktion einfach mal paar Parameter mit übergeben und die in der Console ausgegeben. Der 1. Parameter ist der Button selber und als 2. dann das was gebraucht wird, die DataTable Eigenschaften. Schade, dass sowas nicht in in der Beschreibung steht.

Ok, hier nun der Code:
Javascript:
filename: function (e, dt) {
 const tableNode = dt.table().node();
 const title = $(tableNode).data("title") || "Export";
 const datetime = moment().format("YYYY-MM-DD_HH-mm-ss");

 return `${title}_${datetime}`;
},
Hiermit wird jetzt ein Filename erstellt, der entweder den data-title nimmt bzw. ein Export voranstellt, gefolgt von datetime.
 
Zurück