Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将大型mysql表导出为.xls格式_Php_Phpexcel - Fatal编程技术网

Php 将大型mysql表导出为.xls格式

Php 将大型mysql表导出为.xls格式,php,phpexcel,Php,Phpexcel,我需要将mysql表暴露为.xls格式,这是我代码中的片段 $result = mysql_query( /* here query */ ); $objPHPExcel = new PHPExcel(); $rowNumber = 1; while ($row = mysql_fetch_row($result)) { $col = 'A'; foreach($row as $cell) { $objPHPExc

我需要将mysql表暴露为
.xls
格式,这是我代码中的片段

    $result = mysql_query( /* here query */ );
    $objPHPExcel = new PHPExcel();
    $rowNumber = 1;

    while ($row = mysql_fetch_row($result)) {
       $col = 'A';

       foreach($row as $cell) {
         $objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell);
         $col++;
      }

       $rowNumber++;
    }
问题是,在表中是500000行,而在
中,当我在每次迭代中也进行
foreach
循环时,这在php文件执行时需要花费很多时间


是否可以优化此代码?

这是一个需要注意的问题,而不是对您的问题的直接回答-但是如果您输出的Excel文件格式是
.xls
,最大行数将是65536,如果是MS Excel 2007+格式,例如
.xlsx
,最大行数将是1048576


因此,如果不将输出格式更改为
.xlsx
(这是一种完全不同的结构),文件将太大而无法打开。

这是一个需要注意的问题,而不是直接回答您的问题-但是如果您输出的Excel文件格式是
.xls
,最大行数为65536,如果是MS Excel 2007+格式,例如
.xlsx
,则最大行数为1048576


因此,如果不将输出格式更改为
.xlsx
(这是一种完全不同的结构),文件将太大而无法打开。

考虑将数据转储到csv文件中,然后将其导入Excel。应该快得多。

考虑将数据转储到csv文件中,然后将其导入Excel。应该快得多。

如果出现php超时,可以通过在while或for循环中添加以下内容来重置限制:

set_time_limit(300); //whatever seconds you want
如果您通过浏览器运行,则服务器可能超时。我建议您在命令行上运行它以避免这种情况


此外,与nickhar提到的类似,这可能是一个excel问题。我会尝试以csv文件的形式输出。我认为这将允许您输出更多行。

如果您得到php超时,您可以通过在while或for循环中添加以下内容来重置限制:

set_time_limit(300); //whatever seconds you want
如果您通过浏览器运行,则服务器可能超时。我建议您在命令行上运行它以避免这种情况


此外,与nickhar提到的类似,这可能是一个excel问题。我会尝试以csv文件的形式输出。我认为这将允许您输出更多的行。

500000行总是需要很多时间来写。。。。即使您通过使用工作表的fromArray()方法来摆脱foreach循环来加快速度;而且(正如nichar指出的)xls格式无法处理太多的行,除非将它们拆分到多个工作表中


您可以通过启用单元缓存来降低内存需求(SQLite提供了最佳的内存使用率),但执行500000行仍然需要很长的时间,并且任何这种大小的操作都应该作为批处理/cron作业运行,500000行的写操作总是需要很长的时间。

。。。。即使您通过使用工作表的fromArray()方法来摆脱foreach循环来加快速度;而且(正如nichar指出的)xls格式无法处理太多的行,除非将它们拆分到多个工作表中


您可以通过启用单元缓存来减少内存需求(SQLite提供了最佳的内存使用率),但执行500000行仍然需要很长时间,任何这种大小的操作都应该作为批处理/cron作业来运行

我很确定,在这之前很久,他就会遇到内存使用问题。@Mchl确实如此。CSV会更好,并且没有行限制。如果他不需要任何格式,那么CSV是比xls好得多的选项,尤其是使用MySQLs SELECT INTO OUTFILE。。。虽然行限制仍然适用,但如果有人试图使用Excel2003或Earlier打开生成的文件,我敢肯定,早在那之前,他就会遇到内存使用问题。@Mchl确实如此。CSV会更好,并且没有行限制。如果他不需要任何格式,那么CSV是比xls好得多的选项,尤其是使用MySQLs SELECT INTO OUTFILE。。。尽管行限制仍然适用于任何人尝试使用Excel2003或更早版本+1打开结果文件,以获得PHP和Excel之间关系的作者知识+1了解PHP和Excel之间关系的作者知识!