我必须将 50000 行从表格导出到Excel(或CSV)。将来,这将是百万甚至更多。导出功能是我选择此捆绑包的原因,但现在我发现这是一个错误。
当有超过几千行时,捆绑包就会失败。我认为这是因为内存限制。
我发现了这个:
public function computeData($grid)
{
$data = $this->getGridData($grid);
$this->content = '<table border=1>';
if (isset($data['titles'])) {
$this->content .= '<tr>';
foreach ($data['titles'] as $title) {
$this->content .= sprintf("<th>%s</th>", htmlentities($title, ENT_QUOTES));
}
$this->content .= '</tr>';
}
foreach ($data['rows'] as $row) {
$this->content .= '<tr>';
foreach ($row as $cell) {
$this->content .= sprintf("<td>%s</td>", htmlentities($cell, ENT_QUOTES));
}
$this->content .= '</tr>';
}
$this->content .= '</table>';
}
似乎可以将所有数据同时转换为一个变量。
至少捆绑包允许创建自己的Export类。任何人都知道这个包如何允许例如逐页获取数据?我认为这应该足够了。我找不到任何方法来做到这一点。
答案 0 :(得分:0)
我辞去了使用APY Grid的困扰,因为它的速度很慢,我想做的每一件事都很复杂。
所以我决定使用AngularJS构建表。我花了大约4个小时。现在看起来更好,更快。
使用我自己的功能我现在能够以我想要的方式导出数据。为此,我使用了StreamedResponse,这是我对本周的发现。我在每个页面之后对数据进行分页,清除实体管理器,并将逐页数据发送给接收方。不管脚本的阶段是什么,它使用的内存少于20MB。
它现在可以处理数十亿行。
因此,如果有人遇到同样的问题,我真的建议这样做:)