将MySQL数据导出到Excelmatrix中

我有一个名为“关系”的MySQL表,如下所示:

from to count ------------- AB 456 AC 233 AD 463 BA 766 BC 215 BD 142 

(实际上,“from”和“to”包含人名,表中包含150行)。 我现在需要将这个表格导出为(150×150)matrixforms的excel文件(不是CSV),如下所示:

  | ABCD --+------------------ A | 0 456 233 463 B | 766 0 215 142 

我需要从PHP内部做到这一点,但不知道如何去做这件事。 我是否首先创build一个空的Excel文件,命名所有的行和列? (所以这样:)

  | ABCD --+------------------ A | B | 

如果我这样做,那么我怎样才能连接到正确的细胞插入正确的计数? 或者我从PHP内部一起编写Excel文件?

而且,在现实中,表格不是结构化的,所以它看起来像这样:

 from to ------- AC FK FL BZ MP PA 

所以我不认为我能够逐行,逐行地写。 或者,我应该首先查询数据库按列“从”,然后列“到”sorting,可能。

任何帮助让我开始将不胜感激。

你可能想要使用Pear :: Spreadsheet_Excel_Writer ,它们提供了很好的例子,比如:

 <?php require_once 'Spreadsheet/Excel/Writer.php'; // Creating a workbook $workbook = new Spreadsheet_Excel_Writer(); // sending HTTP headers $workbook->send('test.xls'); // Creating a worksheet $worksheet =& $workbook->addWorksheet('My first worksheet'); // The actual data $worksheet->write(0, 0, 'Name'); $worksheet->write(0, 1, 'Age'); 

非常简单和方便的访问。

但是我个人的经验:如果你需要写大量的数据,不要使用它,我可以节省8列和6万行,前10000行花费大约2分钟,接下来10 000约45分钟,3小时后我停止在达到30 000之前的脚本。我最终使用perl变种 ,花费大约3分钟来完成6万行。

讽刺的是,我现在在Excel中使用CSV导入:)

Excel也会理解html表格。 所以你可以:

  1. 取数据
  2. 迭代和build立一个表,就像你想要在Excel中出来一样
  3. 设置标题下载和MIMEtypes。
  4. 在Excel中打开(您将收到警告消息)。

标题应该看起来像这样:

 <?php [..] header('Content-Type: application/force-download'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Expires: 0'); [..] ?> 

还要考虑这些,以便浏览器不caching文件:

 if (isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)) { header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); } else { header('Pragma: no-cache'); } 
  • 从mysql获取数据
  • 使用提取的数据构build一个数组(您的数据库数据的顺序并不重要,只要您喜欢,您总是可以按键/值对数组进行sorting)
  • 使用PHPExcel(或ExcelWriter类,或其他)来生成你的Excel文件
  • 生成你的文件迭代你的数据数组col,逐行。