将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表格。 所以你可以:
- 取数据
- 迭代和build立一个表,就像你想要在Excel中出来一样
- 设置标题下载和MIMEtypes。
- 在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,逐行。