【发布时间】:2016-12-27 18:19:32
【问题描述】:
我有使用 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 文件?
编辑
建议我尝试使用 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', 行动: }
我只是不知道需要采取什么行动。
我在上面的第二次尝试提取了我需要的整个数据集,但将其发送到屏幕而不是我的 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 文件中的内存以解决你的错误。以及为什么要这样做或以这种方式导出
-
@ShaileshSingh 我过去曾尝试过。这不是一个可行的解决方案,因为没有足够的内存可以让它工作。无论我设置多大的限制,它总是会达到。
-
我不再收到有关达到内存限制的错误。我认为它最初出现只是一个侥幸。
-
不,您不能使用服务器端在客户端上导出,因为您没有所有行。在服务器上导出很简单,只需创建一个 CSV 文件,d'load 和 excel 就可以打开它
-
@ChrisCaviness 我不能使用 CVS,我需要在文件创建时添加格式,而 CVS 不允许这样做。此外,我能够在上面进行的第二次尝试中提取我需要的数据,我只是不知道如何将其发送到我拥有的文件中,该文件将使用 PHPExcel 创建 Excel 文件。
标签: javascript php jquery datatables-1.10