Ich habe Tabellen, die DataTables Server Side-Verarbeitung auf meiner Website zeigen. Ich möchte in der Lage sein, "Alle exportieren" und alle Zeilen exportiert werden, nicht nur die Zeilen angezeigt werden. Es gibt 60000+ Zeilen und 65 + Spalten, also muss es mit serverseitiger Verarbeitung gemacht werden.Alles aus DataTables mit serverseitiger Verarbeitung exportieren?
Ich habe ein paar Dinge ausprobiert, aber bisher hat nichts funktioniert.
Ich habe dies versucht:
{ extend: 'excel',
text: 'Export Current Page',
exportOptions: {
modifier: {
page: 'current'
}
},
customize: function (xlsx)
{
var sheet = xlsx.xl.worksheets['sheet1.xml'];
$('row:first c', sheet).attr('s', '7');
}
}
, die nur die Zeilen exportiert, die auf der Seite zeigen, wurden.
Ich habe dies versucht:
{
text: 'Export All to Excel',
action: function (e, dt, button, config)
{
dt.one('preXhr', function (e, s, data)
{
data.length = -1;
}).one('draw', function (e, settings, json, xhr)
{
var excelButtonConfig = $.fn.DataTable.ext.buttons.excelHtml5;
var addOptions = { exportOptions: { 'columns': ':all'} };
$.extend(true, excelButtonConfig, addOptions);
excelButtonConfig.action(e, dt, button, excelButtonConfig);
}).draw();
}
}
Dieser sendet die Daten der gesamten Tabelle auf dem Bildschirm statt der Paginierung der Verwendung und den gesamten Datensatz in eine Excel-Datei zu senden.
Ich habe auf Google und hier in SO gesucht, aber habe keine Lösung gefunden, die funktioniert.
Ich sollte auch erwähnen, dass ich alle auf der Grundlage der aktuellen Filter auf der Tabelle exportieren möchte. Damit der Endbenutzer nur die Zeilen exportiert, nach denen er sucht. Sie beschränken es typischerweise auf 30k - 40k Zeilen, immer noch mit den 65+ Spalten. Ich erlaube (noch) nicht, Spalten zu entfernen/auszublenden.
EDIT/UPDATE
Hier ist zweitrangig: Wenn ich nicht Alles aus einer Antwort vom Server exportieren kann, kann ich bauen die Excel-Datei auf dem Server? Auf meinen Servern ist Excel nicht installiert und ich möchte, dass mein Endbenutzer die Datei erhält. Ich bin mir sicher, dass ich einen Weg finden müsste, Excel auf meine Server zu bringen, aber wie würde ich irgendwelche erstellten Dateien an den Endbenutzer übertragen und wäre das sogar schneller als nur eine Antwort mit dem gesamten Datensatz zu senden und zu erstellen die Excel-Datei auf dem Computer des Benutzers?
EDIT
Es wurde empfohlen, dass ich jQuerys $.ajax()
dazu zu arbeiten versuchen. Wenn jemand mir eine Idee geben könnte, wie ich das machen soll, werde ich das für einen dritten Knopf versuchen.
Ich kann bereits alle Daten mit den gleichen Filtern und Sortierungen, die vom Benutzer hinzugefügt werden, und dies mit einer Schaltfläche tun. Der zweite Versuch oben tut das aber sendet es an den Bildschirm. Ich habe PHPExcel und eine Datei, die ein Excel-Blatt erstellen kann. Wie nehme ich an, was ich in diesem zweiten Knopf bekomme und schicke es an die andere Datei, um das Excel-Blatt zu erstellen? Ich dachte, dass die Verwendung von JQuery $.ajax()
funktionieren könnte, ich weiß einfach nicht, wie man es bekommt. Ich weiß, dass ich $_POST
verwenden muss, da die Daten zu groß sein könnten, um $_GET
zu verwenden, um die Daten an die PHPExcel-Datei zu senden.
Ich kann bereits in eine CSV exportieren, aber ich muss mit einigen Formatierungen exportieren, die CSV nicht hat. Deshalb werde ich PHPExcel benutzen.
EDIT III
ich dies versuche, obwohl es noch nicht funktioniert:
{
text: 'Export all to Excel II',
action: function (e, dt, button, config)
{
dt.one('preXhr', function (e, s, data)
{
data.length = -1;
}).one('export', function (e, settings, json, xhr)
{
var excelButtonConfig = $.fn.DataTable.ext.buttons.excelHtml5;
var addOptions = { exportOptions: { 'columns': ':all'} };
$.extend(true, excelButtonConfig, addOptions);
excelButtonConfig.action(e, dt, button, excelButtonConfig);
})
}
}
EDIT 4
Hoffentlich wird die zuletzt.
Ich weiß, dass ich drei Dinge tun müssen, um diese Arbeit zu machen:
- Holen Sie sich aktuelle Sortieren und Filtern
- Get-Datensatz mit der Länge auf -1 gesetzt
Senden Sie diese an PHPExcel Datei für Verarbeitung und Erstellung von Excel-Datei ich einen Knopf wie folgt erstellen:
{ Text: ‚alle Daten nach Excel exportieren‘, Aktion: }
Ich weiß einfach nicht, was die Aktion sein muss.
Mein zweiter Versuch oben zieht das gesamte Dataset, das ich brauche, aber sendet es an den Bildschirm statt an meine PHPExcel-Datei (ExportAllToExcel.php).
Ich habe versucht, diese, um herauszufinden, und nicht sehr weit gekommen. Mir wurde gesagt, dass ich $.ajax()
verwenden muss, um dies zu tun, mir wurde gesagt, dass ich das nicht verwenden muss. Ich habe es mit und ohne versucht und bin nirgends hingekommen.
Ich habe auch versucht, diese Wirkung nicht mit:
$.fn.dataTable.ext.buttons.export =
{
className: 'buttons-alert',
"text": "Export All Test",
action: function (e, dt, node, config)
{
var SearchData = dt.search();
var OrderData = dt.order();
alert("Test Data for Searching: " + SearchData);
alert("Test Data for Ordering: " + OrderData);
}
};
Ihr Gedächtnis in der php.ini-Datei für Ihre Fehler erhöhen. Und warum machst du das oder exportierst auf diese Weise – webDev
@ShaileshSingh Ich habe das in der Vergangenheit versucht. Es ist keine praktikable Lösung, da es keine Speicherkapazität gibt, die dies ermöglicht. Egal wie groß ich das Limit setze ist es immer erreicht. – Mike
Ich bekomme nicht mehr den Fehler, das Speicherlimit zu erreichen. Ich denke, es war nur ein Zufall, dass es überhaupt auftauchte. – Mike