Экспорт данных MySQL в матрицу Excel - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть таблица MySQL с именем «Relations», как показано ниже:

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

(На самом деле «from» и «to» содержат имена людей, а таблица содержит 150 строк).Теперь мне нужно экспортировать эту таблицу в файл Excel (не CSV) в матричной форме (150x150), например:

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

Мне нужно сделать это из PHP, но не знаю, какиди об этом.Должен ли я сначала создать пустой файл Excel с именами всех строк и столбцов?(вот так:)

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

Если я сделаю это, то как я могу подключиться к правой ячейке, чтобы ввести правильные значения?Или я вообще пишу файл Excel из PHP?

Кроме того, на самом деле таблица не структурирована, поэтому она выглядит примерно так:

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

Так что я не думаю, чтоЯ могу писать по ячейкам, строка за строкой.Или я должен сначала запросить базу данных для сортировки по столбцу «от», а затем по столбцу «к», вероятно.

Любая помощь для начала работы будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Возможно, вы захотите использовать 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 столбцов и 60 000 строк, первые 10 000 строк заняли около 2 минут, следующие 10 000 - около 45 минут и через 3 часа я остановил скрипт до достижения 30 000. В итоге я использовал вариант perl , который занял около 3 минут, чтобы завершить 60 000 строк.

Ирония в том, что я сейчас использую CSV-импорт в Excel:)

1 голос
/ 08 февраля 2012

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');
}
0 голосов
/ 08 февраля 2012
  • Получить данные из MySQL
  • Создание массива с извлеченными данными (порядок данных в вашей базе данных не имеет значения, вы всегда можете отсортировать массив по ключу / значению в любое время)
  • Используйте PHPExcel (или класс ExcelWriter, или любой другой) для создания файла Excel
  • Создайте файл, повторяя массив данных столбец за строкой, строку за строкой.
...