2016-06-28 4 views
0

Мне нужно экспортировать три таблицы в лист Excel, но все данные в значительной степени сбрасываются в одном поле, создавая большой беспорядок. Можно ли экспортировать содержимое трех таблиц и форматировать их в Excel через PHP? В принципе, чтобы я мог получить:Экспорт определенных таблиц mysql в excel в php

Date:   Subject    Participants 
Start - End  Subject Title  User 1 
            User 2 
            User 3 

В принципе, чтобы все было так? Сделать это ясным и видимым (хотя это может вызвать проблемы с большим количеством участников).

Кроме того, я поделюсь своим кодом, может быть, кто-то может увидеть, что я испортил на этот раз.

<div id="tableform"> 
     <form method="post"> 
      <table class="nostyle"> 
       <tr> 
        <th><label for="startDate">Begin datum:</label></th> 
        <td><input type="date" id="BeginDate" name="BeginDate" placeholder="DD-MM-YYYY"></td> 
        <td><input type="hidden" id="startDate" name="startDate" value="<?= $startdate; ?>"/></td> 
       </tr> 
       <tr> 
        <th><label for="endDate">Eind datum:</label></th> 
        <td><input type="date" id="EindDate" name="EindDate" placeholder="DD-MM-YYYY"></td> 
        <td><input type="hidden" id="endDate" name="endDate" value="<?= $enddate; ?>"/></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td><input type="submit" name="generate" value="Jaarverslag genereren"/></td> 
       </tr> 
      </table> 
     </form> 
    </div> 

И функция:

<?php 
public function generateReport($startDate = null, $endDate = null) { 
    if (empty($startDate) && empty($endDate)) { 
     $time = strtotime("-1 year", time()); 
     $startDate = date("Y-m-d", $time); 
     $endDate = date("Y-m-d"); 
    } 
    $this->generator->create('Jaaroverzicht-' . $startDate . '-' . $endDate); 
    $data = array(
     "Datum" . '' . "Aanwezigen" . '' . "Bijscholing" 
    ); 
    foreach ($this->dbSchooling->getYearReport($startDate, $endDate) as $row) { 
     $users = ""; 
     $participants = $this->dbSchooling->getParticipants($row['bijscholing_id']); 
     foreach ($participants as $participant) { 
      $users .= $participant; 
      if ($participant == end($participants)) { 
       $users .= ', '; 
      } 
     } 
     $myDateTime = \DateTime::createFromFormat('Y-m-d', $row['bijscholing_begindatum']); 
     $newDateString = $myDateTime->format('d-m-Y'); 
     array_push($data, ($newDateString . "." . $users . "." . '.' . $row['bijscholing_titel'])); 
    } 
    foreach ($data as $line) { 
     $this->generator->store(explode('.', $line)); 
    } 
    return $this->generator->close(); 
} ?> 
+0

Я не вижу ничего общего с преувеличением. Вы создаете csv, используя '.' в качестве разделителя? и если вы просто собираетесь взорваться на этом '.' потом в любом случае. зачем даже генерировать строку «dotsv» в первую очередь> просто поместите ваши поля в массив: '$ arr [] = array ($ newDateString, $ users и т. д.);' –

+0

Можете ли вы дать образец как выглядят данные в начале? Жесткая работа, чтобы следовать вашему коду назад, чтобы увидеть, где мы на самом деле начинаем. Вы в настоящее время можете экспортировать данные в excel или это тоже то, что вам нужно от нас? – Philipp

+0

"было бы возможно экспортировать содержимое трех таблиц И отформатировать их в excel через PHP« Нет, Excel - это программное обеспечение на клиенте - ваш компьютер. Вам нужно будет форматировать данные IN PHP и THEN экспортировать их в Excel или наоборот -> просто выбросить данные в excel и позволить вашему пользователю форматировать его на своем ПК, а затем загрузить его на ваш веб-сервер и делать все, что вы хотите – Philipp

ответ

0

Код был отредактирован использовать точку с запятой.

public function generateReport($startDate = null, $endDate = null) { 
    if(empty($startDate) && empty($endDate)) { 
     $time = strtotime("-1 year", time()); 
     $startDate = date("Y-m-d", $time); 
     $endDate = date("Y-m-d"); 
    } 
    /** 
    * Title 
    */ 
    $this->generator->create('Jaaroverzicht-'. $startDate . '-'. $endDate); 
    $data = array(
     "Datum;Bijscholing;Instructeur;Aanwezigen" 
    ); 
    /** 
    * Kopstukken + inhoud 
    */ 
    foreach($this->dbSchooling->getYearReport($startDate, $endDate) as $row) { 
     $users = ""; 
     $participants = $this->dbSchooling->getParticipantsVoornaam($row['bijscholing_id']); 
     foreach($participants as $participant) { 
      $users .= $participant; 
      if($participant !== end($participants)) { 
       $users .= ', '; 
      } 
     } 
     $myDateTime = \DateTime::createFromFormat('Y-m-d', $row['bijscholing_begindatum']); 
     $newDateString = $myDateTime->format('d-m-Y'); 
     array_push($data, ($newDateString . ";" . $row['bijscholing_titel'] . " ; " . $row['bijscholing_presentator'] . ' ; ' . $users)); 
    } 
    foreach ($data as $line) 
    { 
     $this->generator->store(explode(';', $line)); 
    } 
    return $this->generator->close(); 
} 

Сложная проблема возникла только в конкретной версии Excel. Файл правильно настроен в Open Office Calc. Используя точку с запятой в качестве разделителя, было легко разобраться в остальном. Надеюсь, это поможет кому-то еще с подобными проблемами.

Смежные вопросы