我有一些表格在我的网站上使用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和这里(指stackoverflow)搜索了一下,但没有找到可行的解决方案。
我也应该提到,我想基于表格上设置的当前过滤器导出所有内容。以便最终用户仅获得他们正在搜索的那些行的导出。它们通常将其限制为30k - 40k行,仍带有65+列。我(还)不允许删除/隐藏列。
编辑 / 更新:
这是一个次要的考虑因素:如果我无法从服务器响应中全部导出,则可以在服务器上构建Excel文件吗?我的服务器没有安装Excel,我仍然希望我的最终用户获得该文件。我相信我必须找到一种方法将Excel放入我的服务器中,但我如何将任何创建的文件传输到最终用户,并且是否比仅向用户计算机发送整个数据集的响应更快?
编辑:
建议我尝试jquery的“$.ajax()”使其工作。如果有人可以给我一个关于如何做到这一点的想法,我将尝试第三个按钮。
我已经可以提取所有数据,具有用户添加的相同过滤器和排序,可以通过按钮执行此操作。上面的第二次尝试确实是这样做的,但将其发送到屏幕。我有PHPExcel和一个可以创建Excel工作表的文件。如何将我在第二个按钮中获得的内容发送到其他文件以创建Excel工作表?我认为使用jquery的“$.ajax()”可能有效,只是我不知道如何实现。我确实知道我必须使用“$ _POST”,因为数据可能太大而无法使用“$ _GET”将数据发送到PHPExcel文件。
我已经可以导出CSV,但我需要带有一些格式的导出,CSV没有这个功能。这就是为什么我要费心使用PHPExcel的原因。
编辑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);
})
}
}
编辑4
希望这是最后一次编辑。
我知道我需要做三件事才能使它工作:
- 获取当前的排序和筛选
- 获取设置为-1的数据集
将其发送到PHPExcel文件进行处理和创建Excel文件 我可以像这样创建一个按钮:
{ text: '将所有数据导出到Excel', action: }
我只是不知道操作需要是什么。
我上面的第二次尝试提取了我需要的整个数据集,但将其发送到屏幕而不是我的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);
}
};