2014-12-28 3 views
1

Я создал в PHP календарь, чтобы показать моему боссу мои праздники.Заполните матрицу в PHPEXCEL с данными из базы данных

Календарь отлично работает.

Я должен экспортировать данные календаря в листе Excel в следующем формате:

enter image description here

Я хотел бы знать, как я могу поставить крест в этой таблице в марте 09, если я возьму праздник на марше 9.

Я попытался это, но мой путь, кажется, не самый лучший способ:

Я начинаю в первой ячейке, и я просмотреть всю ячейку, если я найду отпуск, я положил пересекать.

EDIT я изменить свой код на советы Марка (смотри ниже)

$sql = "SELECT id, nom, prenom FROM utilisateurs"; 
$fiches = $bdd->prepare($sql); 
$users = $fiches->execute(); 
$user_number = 0; 

$res = $fiches->fetchAll(PDO::FETCH_OBJ); 
$ligne = 0; 
foreach($res as $user) 
{ 
    $ligne = 1; 
    $user_number++; 
    $objPHPExcel->createSheet($user_number); 
    $objPHPExcel->setActiveSheetIndex($user_number); 
    $objPHPExcel->getActiveSheet()->setTitle($user->nom); 

    $ligne++; 
    $num_jours = cal_days_in_month(CAL_GREGORIAN, $month, $annee_en_cours); 

    $col = 'A'; 


    $sql = "SELECT jour, commentaire 
      FROM reservations 
      WHERE id_user = ".$user->id; 
    $sql.= " ORDER BY jour"; 
    echo $sql.'<br />'; 
    $req = $bdd->prepare($sql); 
    $execution = $req->execute(); 
    $res = $req->fetchAll(PDO::FETCH_OBJ); 
    echo '<pre>'; 
    print_r($res); 
    echo '</pre>'; 
    if (count($res) > 0) 
    { 



     $objPHPExcel->getActiveSheet()->SetCellValue($col.$ligne, $res[0]->jour); 
    } 
    echo $col.$ligne.'</br />'; 
    $col++; 




    $ii = 1; 
    for($col = 'A'; $col !== 'AF'; $col++) 
    { 
     $objPHPExcel->getActiveSheet()->SetCellValue($col.'1', $ii); 

    } 
} 

я получаю это:

SELECT jour, commentaire FROM reservations WHERE id_user = 57 ORDER BY jour 

Массив ( [0] => StdClass Object ( [jour] => 2014_08_14_AM [комментарий] => )

[1] => stdClass Object 
    (
     [jour] => 2014_10_02_AM 
     [commentaire] => 
    ) 

[2] => stdClass Object 
    (
     [jour] => 2014_10_16_AM 
     [commentaire] => 
    ) 

[3] => stdClass Object 
    (
     [jour] => 2014_11_05_AM 
     [commentaire] => 
    ) 

[4] => stdClass Object 
    (
     [jour] => 2014_11_06_AM 
     [commentaire] => 
    ) 

[5] => stdClass Object 
    (
     [jour] => 2014_12_03_AM 
     [commentaire] => 
    ) 

[6] => stdClass Object 
    (
     [jour] => 2014_12_10_AM 
     [commentaire] => 
    ) 

)

А2 SELECT, Jour, Commentaire ОТ оговорок ГДЕ id_user = 58 ORDER BY Jour

Массив ( [0] => StdClass Object ( [Jour] => 2014_06_03_AM [комментарий] => )

[1] => stdClass Object 
    (
     [jour] => 2014_06_12_AM 
     [commentaire] => 
    ) 

[2] => stdClass Object 
    (
     [jour] => 2014_06_17_AM 
     [commentaire] => 
    ) 

[3] => stdClass Object 
    (
     [jour] => 2014_08_01_AM 
     [commentaire] => 
    ) 

[4] => stdClass Object 
    (
     [jour] => 2014_08_07_AM 
     [commentaire] => 
    ) 

[5] => stdClass Object 
    (
     [jour] => 2014_12_01_AM 
     [commentaire] => test 
    ) 

[6] => stdClass Object 
    (
     [jour] => 2014_12_03_AM 
     [commentaire] => 
    ) 

[7] => stdClass Object 
    (
     [jour] => 2014_12_11_AM 
     [commentaire] => test 
    ) 

[8] => stdClass Object 
    (
     [jour] => 2014_12_24_AM 
     [commentaire] => test 
    ) 

[9] => stdClass Object 
    (
     [jour] => 2015_01_01_AM 
     [commentaire] => 
    ) 

)

А2 SELECT, Jour, Commentaire ОТ оговорок ГДЕ id_user = 59 ORDER BY Jour

Массив ( [0] => StdClass Object ( [Jour] => 2014_12_03_AM [Commentaire] => )

[1] => stdClass Object 
    (
     [jour] => 2014_12_04_AM 
     [commentaire] => 
    ) 

)

A2 Execution OK, veuillez cliquer pour sauvegarder le document Это не лучший способ, у вас есть идея?

ответ

1

Лучше получить список всех праздников за год (один запрос на базу данных, чтобы вернуть все строки отпускания, а не 365/366 запросов для каждой отдельной даты), а затем выполнить цикл через этот набор результатов ...вы должны иметь возможность выработать адрес ячейки для хранения Х с даты, извлекая компоненты месяца и даты.

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