Dynami c mysql -> Excel экспорт - PullRequest
       21

Dynami c mysql -> Excel экспорт

0 голосов
/ 29 января 2020

Прежде всего - «нормальный» экспорт и запись файла Excel с использованием phpspreadsheet работает как чудо. То, что я не могу выяснить, это как это сделать динамически c. «Dynami c» означает не определять заголовки вручную в row1 и не определять вручную столбцы данных из mysql.

Что я сделал (попробовал):

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('test');

if ($result = $mysqli -> query($sql)) {
    $co = 'A';
    $ro = '1';
    while ($fieldinfo = $result -> fetch_field()) {
        // printf("$col.$row %s\n", $fieldinfo -> name);
        $sheet->setCellValue($co.$ro, $fieldinfo -> name);
        $$co = $fieldinfo -> name;
        $co++;
        }
    $result -> free_result();
}

Это создает файл Excel со всеми именами полей, как определено в представлении mysql. Задача состоит в том, чтобы поместить дату в столбец за столбцом, не создавая их по коду. Что я сделал, так это сгенерировал переменную для каждого столбца. Итак, $A = firstname, $B = name, и т. Д. c.

Моя идея состояла в том, чтобы обратиться к этой переменной с помощью чего-то вроде "первый столбец - это" А ", тогда я должен обратиться к переменной $A. Но динамический вызов переменных как-то не работает

$sheet->setCellValue($co.$ro, $row[$cuco]);

$cuco (текущий столбец) должен быть $cuco = '$'.$A, но тогда значение $cuco будет $A, а разрешенная переменная $A который должен быть "имя", то есть

1 Ответ

0 голосов
/ 30 января 2020

Что я сделал, так это добавил комментарий к каждому столбцу в базе данных, который соответствует заголовку, который я хочу для этого столбца. Дополнительный запрос даст вам те данные, которые вы затем сможете использовать для заполнения строки заголовка.

Вот функция, которую я использую FWIW:

//
// Returns an array indexed by column names with the column comment,
// if any, as the value from the table name that is passed - columns
// that do not have a comment are not included in the returned array
//

public function get_column_comments($table) {

$ColsQ = $this->database->prepare('SHOW FULL COLUMNS FROM `' . $table . '`');
$ColsQ->execute();
$ColsD = $ColsQ->fetchAll(PDO::FETCH_ASSOC);

foreach ($ColsD as $col) {

    if (empty($col['Comment'])) {continue;}  // ignore columns without a comment

    $cols[$col['Field']] = $col['Comment'];
}

return $cols;

}  // end of get_column_comments function
...