У меня есть таблицы, которые используют обработку на стороне сервера DataTables для показа на моем веб-сайте. Я хочу иметь возможность «Экспортировать все» и экспортировать все строки, а не только отображаемые строки. Есть 60000+ строк и 65 + столбцов, поэтому это должно быть сделано с обработкой на стороне сервера.Экспортировать все из данных с обработкой на стороне сервера?
Я пробовал несколько вещей, но до сих пор ничего не сработало.
Я попытался это:
{ 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');
}
}
Что экспортируются только те строки, которые были с указанием на этой странице.
Я попытался это:
{
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();
}
}
Это посылает данные всей таблицы на экран вместо использования пагинации и отправок всего набора данных в файл Excel.
Я искал в Google и здесь, в SO, но не нашел решения, которое работает.
Следует также упомянуть, что я хочу экспортировать все на основе текущих фильтров, установленных в таблице. Чтобы конечный пользователь получал Экспорт только тех строк, которые они ищут. Обычно они ограничивают его до 30k - 40k строк, все еще с 65 + столбцами. Я еще не разрешаю удалять/скрывать столбцы.
EDIT/UPDATE
Вот второстепенное значение: Если я не могу экспортировать все из ответа сервера, я могу построить Excel файл на сервере? На моих серверах не установлен Excel, и я все равно хочу, чтобы мой конечный пользователь получил файл. Я уверен, что мне нужно будет найти способ получить Excel на моих серверах, но как я могу передать любые созданные файлы конечному пользователю, и это будет даже быстрее, чем просто отправить ответ со всем набором данных и создать файл Excel на компьютере пользователя?
EDIT
Было рекомендовано, что я пытаюсь JQuery-х $.ajax()
, чтобы получить эту работу. Если кто-то может дать мне представление о том, как это сделать, я попробую сделать это для третьей кнопки.
Я уже могу вытащить все данные с теми же фильтрами и сортировкой, которые добавлены пользователем, и сделать это с помощью кнопки. Вторая попытка выше делает это, но отправляет его на экран. У меня есть PHPExcel и файл, который может создать лист Excel. Как я возьму то, что получаю в этой второй кнопке, и отправлю его в другой файл, чтобы создать лист Excel? Я думал, что использование jQuery $.ajax()
может работать, я просто не знаю, как его получить. Я знаю, что мне придется использовать $_POST
, так как данные могут быть слишком большими, чтобы использовать $_GET
для отправки данных в файл PHPExcel.
Я уже могу экспортировать в CSV, но мне нужно экспортировать с некоторым форматированием, которого нет в CSV. Вот почему я столкнулся с проблемой использования PHPExcel.
EDIT III
Я пытаюсь это, хотя он еще не работает:
{
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
Будем надеяться последнего редактирования.
Я знаю, что я должен сделать три вещи, чтобы сделать эту работу:
- Получить текущий Сортировка и фильтрация
- Получить набор данных с длиной равным -1
Отправить это PHPExcel файл для обработка и создание файла Excel Я могу создать кнопку, как это:
{ текст: «экспортировать все данные в Excel», действие: }
Я просто не знаю, какое действие должно быть.
Моя вторая попытка выше тянет весь набор данных, который мне нужен, но отправляет его на экран вместо моего файла PHPExcel (ExportAllToExcel.php).
Я пытался понять это и не очень далеко. Мне сказали, что мне нужно использовать $.ajax()
для этого, мне сказали, что мне не нужно это использовать. Я пробовал с и без, и не смог никуда добраться.
Я также попытался использовать это никакого эффекта:
$.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);
}
};
Увеличение памяти в файле php.ini для вашей ошибки. И почему вы делаете это или экспортируете таким образом? – webDev
@ShaileshSingh Я пробовал это в прошлом. Это не жизнеспособное решение, так как нет никакой памяти, которая позволит этому работать. Независимо от того, насколько велика я устанавливаю предел, это всегда достигается. – Mike
Я больше не получаю ошибку о достижении предела памяти. Я думаю, что это была просто случайность, в первую очередь это проявилось. – Mike