如何将带有39列的500,000行数据从MySQL转换为Excel

时间:2014-03-06 07:46:56

标签: php mysql phpexcel

我有一个PHP Web应用程序,可以使用PHPExcel将数据转换为excel文件。 Web应用程序在Linux机器内运行。

这些是涉及的步骤。

  1. 我需要运行多个连接查询来获取我想要的数据。
  2. 然后我获取数据并使用PHPExcel将它们写入excel文件。
  3. 分批重复步骤1-2~5000行。
  4. 我注意到单独产生~50000行(大约10%)的时间差不多是15分钟,这太长了。

    我需要每天生成一次这个excel文件。

    在我的头顶,我有以下选择。

    a)我不是重复执行步骤1和2大约10次,而是可以检索步骤1中所需的所有数据,并将数据存储到单独的MySQL表中。

    然后我尝试PHPExcel并读取此表一次并编写excel文件一次。

    最后,我会再把这张桌子擦干净。

    b)与a)相同但不是使用PHPExcel,而是找到一种在云端Windows实例中运行MySQL For Excel以生成Excel文件的方法。

    如果需要进一步格式化,我将使用PHPExcel格式化此Excel文件。

    在Linux机器和Windows云实例之间发送数据的方式是通过电子邮件附件,因为Linux机器在防火墙内。

    我发布这个问题,看看是否有人有更好的主意。

    与此同时,我会尝试选项a)。

    我不知道如何为选项b)运行Windows实例和microsoft excel。

1 个答案:

答案 0 :(得分:1)

至于我,最好的方法是使用mysql SELECT INTO OUTFILE。您可以将结果导出到csv,Microsoft Excel将正确打开

示例:

SELECT * INTO OUTFILE '/tmp/result.csv'
   FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ‘\\’
    LINES TERMINATED BY '\n'
FROM table

之后,你可以使用像PHPexcel这样的php库来转换csv到xls

include 'PHPExcel/IOFactory.php';

$objReader = PHPExcel_IOFactory::createReader('CSV');

// If the files uses a delimiter other than a comma (e.g. a tab), then tell the reader
$objReader->setDelimiter("\t");
// If the files uses an encoding other than UTF-8 or ASCII, then tell the reader
$objReader->setInputEncoding('UTF-16LE');

$objPHPExcel = $objReader->load('MyCSVFile.csv');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('MyExcelFile.xls');