我有使用 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+ 列。我(还)不允许删除/隐藏列。
编辑/更新
这是第二个考虑因素:如果我无法从服务器的响应中导出全部,我可以在服务器上构建 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 文件
我可以创建一个像这样的按钮:
{
text: '将所有数据导出到 Excel',
行动:
}
我只是不知道需要采取什么行动。
我上面的第二次尝试提取了我需要的整个数据集,但将其发送到屏幕而不是我的 PHPExcel 文件(导出全部到Excel.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);
}
};