2016-06-28 8 views
0

Ich muss drei bestimmte Tabellen in ein Excel-Blatt exportieren, aber alle Daten sind ziemlich viel in einem Feld, was eine große Unordnung verursacht. Ist es möglich, den Inhalt der drei Tabellen zu exportieren und sie in Excel durch PHP zu formatieren? Grundsätzlich so, dass ich bekomme:Exportieren von bestimmten MySQL-Tabellen zu übertreffen in PHP

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

Grundsätzlich so, dass alles so ist? Um es klar und sichtbar zu machen (obwohl dies Probleme mit einer größeren Anzahl von Teilnehmern verursachen könnte).

Auch ich werde meinen Code teilen, vielleicht kann jemand sehen, was ich dieses Mal verpfuscht.

<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> 

Und die Funktion:

<?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

Ich sehe nichts mit Excel dort zu tun. Generieren Sie einen csv mit '.' als Trennzeichen? und wenn du danach einfach auf dieses '' 'explodierst. Warum sollte man überhaupt eine "dotsv" Zeichenkette erzeugen? Stellen Sie einfach Ihre Felder in ein Array: '$ arr [] = array ($ newDateString, $ users, etc ....);' –

+0

Können Sie ein Beispiel geben? Wie sehen die Daten am Anfang aus? Harte Arbeit, um deinen Code rückwärts zu verfolgen, nur um zu sehen, wo wir eigentlich anfangen. Können Sie aktuell Daten in Excel exportieren oder benötigen Sie das auch von uns? – Philipp

+0

"wäre es möglich, den Inhalt der drei Tabellen zu exportieren UND sie in Excel durch PHP zu formatieren" Nein, Excel ist Software auf dem Client - Ihrem PC. Sie müssten die Daten in PHP formatieren und dann in Excel oder anders herum exportieren -> einfach Daten in Excel übertragen und Ihren Benutzer formatieren, auf seinem PC, dann laden Sie es auf Ihren Webserver und tun, was Sie wollen – Philipp

Antwort

0

Der Code bearbeitet wurde Semikolons zu verwenden.

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

Das aufgetretene Problem war nur in einer bestimmten Version von Excel. Die Datei ist in Open Office Calc korrekt konfiguriert. Durch die Verwendung eines Semikolons als Trennzeichen war es einfach, den Rest herauszufinden. Hoffe, das hilft anderen mit ähnlichen Problemen.