2012-02-07 75 views
2

我已经如下名为“关系”的一个MySQL表,:出口MySQL数据导入Excel矩阵

from to count 
------------- 
A B 456 
A C 233 
A D 463 
B A 766 
B C 215 
B D 142 

(在现实中,“从”和“到”包含的人的名字和表包含150行)。我现在需要这个表中(150×150)矩阵形式导出到Excel文件(不CSV),像这样:

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

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

| A B C D 
--+------------------ 
A | 
B | 

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

而且,现实中的表不规整,所以它看起来是这样的:

from to 
------- 
A C 
F K 
F L 
B Z 
M P 
P A 

所以我不认为我能写的细胞通过细胞,行了行。或者我应该首先查询数据库,按照列“from”,然后按列“to”排序,可能。

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

+3

只导出这是一个CSV文件 - 这是最好的赌注。 – 2012-02-07 22:02:07

+0

您是否尝试将excel导出到txt。格式如果不是你应该尝试它,你可以看到文本的结构,然后你可以简单地把它放到你的数据库。 – tomexsans 2012-02-07 21:59:49

+0

导出为CSV时,可以将其加载到Excel中并执行另存为并将其转换为Excel特定的格式。 – 2012-02-08 16:02:07

回答

1

你可能想使用Pear::Spreadsheet_Excel_Writer,它们提供了良好范例here如:

<?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 variant,花了大约3分钟完成了6万行。

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

+0

谢谢,我最终构建了一个HTML表格(如下所示)以导入Excel。但是写入CSV并导入Excel也是一个简单的选择:)谢谢! – Pr0no 2012-02-07 22:27:50

0
  • 从MySQL
  • 建立与获取的数据数组读取数据(你的数据库数据的顺序并不重要,你可以随时通过按键排序数组/值,只要你喜欢)
  • 使用PHPExcel(或ExcelWriter类,或任何)来生成你的Excel文件
  • 生成你的文件迭代你的数据数组col,逐行。
1

的Excel也将了解HTML表格。所以,你可以:

  1. 获取数据
  2. 迭代,并建立就像你想的是出来在Excel
  3. 套头下载和MIME类型的表。
  4. 在Excel中打开(您将收到警告消息)。

头应该是这个样子:

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

还要考虑这些,使浏览器不缓存文件:

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'); 
}