Export to Excel not work

есть ли ограничения на экспорт в 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 а не выгружать все на страницу и потом уже передавать ему сам элемент

https://snippet.webix.com/qlps8z1c

Добрый день @snooper,

Исходный JSON передать не выйдет, однако вместо отображаемого компонента можно создать DataCollection с нужными данными и передать коллекцию в toExcel.

Ознакомьтесь, пожалуйста, с фрагментом кода: Code Snippet

1 Like

Спасибо, но в снипете Uncaught TypeError: Cannot read properties of undefined (reading ‘footer’).

Подскажите как вместе с данными и столбцы добавить?

Да, в сниппете не достает parse. Пожалуйста, ознакомьтесь с фрагментом кода: Code Snippet

Также в примере приведен вариант, как экспортировать колонки выборочно. Больше информации об этом и других способах вы найдете в документации.

1 Like

Спасибо, буду пробовать

Обнаружил баг или что то не понятное. при добавлении колонок из существующей таблицы а именно
var table = $$(“table”);
webix.toExcel(store, {
columns: table.config.columns,
styles: true,
filterHTML: true,
});
Происходит двойное создание и скачивание файла. Как то можно это исправить?

Дело в том, что если отправлять колонки напрямую, срабатывает дополнительный экпорт Вебикса. Чтобы избежать такого поведения, лучше ссылаться на копию колонок: Code Snippet

1 Like

да спасибо попробую, подозревал

Проверил работает, огромное спасибо.

1 Like