есть ли ограничения на экспорт в excel? в таблице 6000 записей, не экспортирует(400 записей экспортирует нормально)?
Таких ограничений нет. Более того, всё работает хорошо:
http://webix.com/snippet/36b73341
Покажите, пожалуйста, вашу реализацию.
таблица (колонок - 26, columns сформирован в sql файле)
{
columns: columns,
data: [],
datatype: "jsarray",
id: "card",
navigation: true,
select: true,
tooltip: true,
view: "datatable",
on: {
onSelectChange: function () {
},
onAfterFilter: function () {
$$('label_count').setValue('Записей: ' + $$('card').count());
},
},
pager: "pagerA"
},
процедура загрузки данных
function getRequestTable(report_id, control_id, url_parameters, callback, clear) {
var dtable = $$(control_id);
if (clear === undefined || clear == true) {
dtable.clearAll();
dtable.showOverlay('загрузка данных, подождите пожалуйста...');
}
url_parameters.pck = report_id;
url_parameters.cache = Math.random();
$.get("/qResultTable.aspx", url_parameters,
function (ret) {
var data_ = JSON.parse(ret);
var grid_data = [];
var columns = {};
if (!isBaseError(data_.data)) {
grid_data = massive_to_obj_table(data_.data);
if (data_.ParamsJson) {
columns = data_.ParamsJson.columns;
name_query = data_.ParamsJson.name;
}
var datat = new webix.DataCollection({ data: grid_data });
dtable.data.sync(datat);
dtable.refreshColumns(columns);
if (callback) {
callback(name_query, control_id);
}
if (dtable.count() > 0) {
dtable.hideOverlay();
}
else {
dtable.showOverlay('данных нет');
}
}
});
}
выгрузка в excel
{
view: "icon", icon: 'file-excel-o', tooltip: 'Экспорт в Excel', click: function () {
webix.toExcel($$("card"));
}
},
Да, стоит признать, что при больших объемах данных экспорт не работает. Webix использует библиотеку GitHub - SheetJS/sheetjs: SheetJS Community Edition -- Spreadsheet Data Toolkit, которая и вызывает ошибку. Будем решать этот вопрос в будущем.
а если данные в таблице разбиты на page, export будет по выбранной странице или вся таблица все равно?
Вся таблица.
а известна более точное ограничение по количеству строк или объему данных , который вызовет эту ошибку?
Как такового ограничения нет, просто в оригинальной библеотеке очень нерационально реализована часть кода ( отдельные методы имеют сложность N^2 и как результат, на больших объемах данных библиотека начинает работать очень медленно )
Я думаю в течении ближайшей недели-двух мы перейдем на свой форк, где экспорт будет работать быстрее. ( На очень-очень больших объемах данных он скорее всего будет тоже тормозить )
Мой вариант 100% работает до 2000 строк 30 столбцов.
Тестируем да 100 000 строк.
Не понятно как в webix.toExcel передавать именно json а не выгружать все на страницу и потом уже передавать ему сам элемент
Добрый день @snooper,
Исходный JSON передать не выйдет, однако вместо отображаемого компонента можно создать DataCollection с нужными данными и передать коллекцию в toExcel.
Ознакомьтесь, пожалуйста, с фрагментом кода: Code Snippet
Спасибо, но в снипете Uncaught TypeError: Cannot read properties of undefined (reading ‘footer’).
Подскажите как вместе с данными и столбцы добавить?
Да, в сниппете не достает parse. Пожалуйста, ознакомьтесь с фрагментом кода: Code Snippet
Также в примере приведен вариант, как экспортировать колонки выборочно. Больше информации об этом и других способах вы найдете в документации.
Спасибо, буду пробовать
Обнаружил баг или что то не понятное. при добавлении колонок из существующей таблицы а именно
var table = $$(“table”);
webix.toExcel(store, {
columns: table.config.columns,
styles: true,
filterHTML: true,
});
Происходит двойное создание и скачивание файла. Как то можно это исправить?
Дело в том, что если отправлять колонки напрямую, срабатывает дополнительный экпорт Вебикса. Чтобы избежать такого поведения, лучше ссылаться на копию колонок: Code Snippet
да спасибо попробую, подозревал
Проверил работает, огромное спасибо.