Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][PHPExcel] Pobieranie danych w pętli z MySQL
Forum PHP.pl > Forum > Przedszkole
Barcelona
Witam, tematyka niby prosta, jednak nie wiem jak się za nią zabrać. Dopiero raczkuje z systemem PHPExcel, ale wydaje się dość ciekawie i przyjaźnie napisany.
Dopiero dzisiaj przysiadłem do tej klasy i mniej więcej zorientowałem się jak tworzyć arkusze oraz w jaki sposób wprowadzić dane. Jednak mam teraz problem, ponieważ chciałbym w pętli pobrać dane do tego arkusza.

Otóż aktualnie mój arkusz wygląda tak:

  1. include 'Classes/PHPExcel.php';
  2. include 'Classes/PHPExcel/Writer/Excel5.php';
  3. $PHPExcel = new PHPExcel();
  4. $PHPExcel->getActiveSheet()->getStyle('A1:A4')->getFill()
  5. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  6. ->getStartColor()->setRGB('00FF00');
  7. $PHPExcel->getActiveSheet()->setCellValue('A1', 'Zestawienie produkcyjne z dnia: '.$data.'');
  8. $PHPExcel->getActiveSheet()->getColumnDimension('A')-> setAutoSize(true);
  9. $PHPExcel->getActiveSheet()->getStyle('A1:A2')->getFont()->setBold(true);
  10. $PHPExcel->getActiveSheet()->setCellValue('A2', 'Arkusz wygenerował: '.$creator.'');
  11.  
  12. $PHPExcel->getActiveSheet()->getStyle('B1:F1')->getFill()
  13. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  14. ->getStartColor()->setRGB('FFC000');
  15. $PHPExcel->getActiveSheet()->getColumnDimension('B')-> setAutoSize(true);
  16. $PHPExcel->getActiveSheet()->getColumnDimension('C')-> setAutoSize(true);
  17. $PHPExcel->getActiveSheet()->getColumnDimension('D')-> setAutoSize(true);
  18. $PHPExcel->getActiveSheet()->getColumnDimension('E')-> setAutoSize(true);
  19. $PHPExcel->getActiveSheet()->getColumnDimension('F')-> setAutoSize(true);
  20. $PHPExcel->getActiveSheet()->setCellValue('B1', 'Maszyna');
  21. $PHPExcel->getActiveSheet()->setCellValue('C1', 'Numer Pojemnika');
  22. $PHPExcel->getActiveSheet()->setCellValue('D1', 'Ilość');
  23. $PHPExcel->getActiveSheet()->setCellValue('E1', 'Waga');
  24. $PHPExcel->getActiveSheet()->setCellValue('F1', 'Pracownik');


Oczywiście zamieściłem środek, bez zbędnych linijek. Jak widzicie od komórki B1 do F1 utworzyłem nagłówki "tabelki" i teraz chciałbym poniżej wrzucać dane z bazy. Intuicja mi podpowiada że jest to banalne, jednak dzisiaj umysł płata mi figle. Wolałem zaczerpnąć informacji u was.
tolomei
Witaj.

  1. include 'Classes/PHPExcel.php';
  2. include 'Classes/PHPExcel/Writer/Excel5.php';
  3. $PHPExcel = new PHPExcel();
  4. $PHPExcel->getActiveSheet()->getStyle('A1:A4')->getFill()
  5. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  6. ->getStartColor()->setRGB('00FF00');
  7. $PHPExcel->getActiveSheet()->setCellValue('A1', 'Zestawienie produkcyjne z dnia: '.$data.'');
  8. $PHPExcel->getActiveSheet()->getColumnDimension('A')-> setAutoSize(true);
  9. $PHPExcel->getActiveSheet()->getStyle('A1:A2')->getFont()->setBold(true);
  10. $PHPExcel->getActiveSheet()->setCellValue('A2', 'Arkusz wygenerował: '.$creator.'');
  11.  
  12. $PHPExcel->getActiveSheet()->getStyle('B1:F1')->getFill()
  13. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  14. ->getStartColor()->setRGB('FFC000');
  15. $PHPExcel->getActiveSheet()->getColumnDimension('B')-> setAutoSize(true);
  16. $PHPExcel->getActiveSheet()->getColumnDimension('C')-> setAutoSize(true);
  17. $PHPExcel->getActiveSheet()->getColumnDimension('D')-> setAutoSize(true);
  18. $PHPExcel->getActiveSheet()->getColumnDimension('E')-> setAutoSize(true);
  19. $PHPExcel->getActiveSheet()->getColumnDimension('F')-> setAutoSize(true);
  20. $PHPExcel->getActiveSheet()->setCellValue('B1', 'Maszyna');
  21. $PHPExcel->getActiveSheet()->setCellValue('C1', 'Numer Pojemnika');
  22. $PHPExcel->getActiveSheet()->setCellValue('D1', 'Ilość');
  23. $PHPExcel->getActiveSheet()->setCellValue('E1', 'Waga');
  24. $PHPExcel->getActiveSheet()->setCellValue('F1', 'Pracownik');
  25. $sql = "SELECT * FROM tabela";
  26. $q = mysql_query($sql);
  27. $licznik = 2;
  28. while($row = mysql_fetch_array($q)) {
  29. $PHPExcel->getActiveSheet()->setCellValue('B'.$licznik, $row['kolumna1']);
  30. $PHPExcel->getActiveSheet()->setCellValue('C'.$licznik, $row['kolumna2']);
  31. $PHPExcel->getActiveSheet()->setCellValue('D'.$licznik, $row['kolumna3']);
  32. $PHPExcel->getActiveSheet()->setCellValue('E'.$licznik, $row['kolumna4']);
  33. $PHPExcel->getActiveSheet()->setCellValue('F'.$licznik, $row['kolumna5']);
  34. $licznik++;
  35. }


Celowo pominąłem obsługę błędów dla uproszczenia skryptu.
To nie jest jedyny sposób na realizację tego zadania.

Pozdrawiam.
Barcelona
Tak, ale to wypisze całą zawartość tabeli w komórce od B2 do F2. Mi konkretnie chodzi żeby wypisało z podziałem na komórki.

Nie zauważyłem $licznik++; a więc zwracam honor. Jednak i tak twierdze że nie jest to dobry sposób. Ponieważ jeżeli będę chciał w ostatniej komórce zrobić sume ilości to muszę wiedzieć konkretny numer komórki. $licznik podbija cały czas o jeden i tak naprawde nie wiadomo ile będzie tych podbić.
tolomei
To użyj pętli for.

  1. include 'Classes/PHPExcel.php';
  2. include 'Classes/PHPExcel/Writer/Excel5.php';
  3. $PHPExcel = new PHPExcel();
  4. $PHPExcel->getActiveSheet()->getStyle('A1:A4')->getFill()
  5. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  6. ->getStartColor()->setRGB('00FF00');
  7. $PHPExcel->getActiveSheet()->setCellValue('A1', 'Zestawienie produkcyjne z dnia: '.$data.'');
  8. $PHPExcel->getActiveSheet()->getColumnDimension('A')-> setAutoSize(true);
  9. $PHPExcel->getActiveSheet()->getStyle('A1:A2')->getFont()->setBold(true);
  10. $PHPExcel->getActiveSheet()->setCellValue('A2', 'Arkusz wygenerował: '.$creator.'');
  11.  
  12. $PHPExcel->getActiveSheet()->getStyle('B1:F1')->getFill()
  13. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  14. ->getStartColor()->setRGB('FFC000');
  15. $PHPExcel->getActiveSheet()->getColumnDimension('B')-> setAutoSize(true);
  16. $PHPExcel->getActiveSheet()->getColumnDimension('C')-> setAutoSize(true);
  17. $PHPExcel->getActiveSheet()->getColumnDimension('D')-> setAutoSize(true);
  18. $PHPExcel->getActiveSheet()->getColumnDimension('E')-> setAutoSize(true);
  19. $PHPExcel->getActiveSheet()->getColumnDimension('F')-> setAutoSize(true);
  20. $PHPExcel->getActiveSheet()->setCellValue('B1', 'Maszyna');
  21. $PHPExcel->getActiveSheet()->setCellValue('C1', 'Numer Pojemnika');
  22. $PHPExcel->getActiveSheet()->setCellValue('D1', 'Ilość');
  23. $PHPExcel->getActiveSheet()->setCellValue('E1', 'Waga');
  24. $PHPExcel->getActiveSheet()->setCellValue('F1', 'Pracownik');
  25. $sql = "SELECT * FROM tabela";
  26. $q = mysql_query($sql);
  27. $ile = mysql_num_rows($q);
  28. $wiersz_start = 2;
  29. for($i = $wiersz_start; $i < $ile + $wiersz_start; $i++) {
  30. $row = mysql_fetch_array($q);
  31. $PHPExcel->getActiveSheet()->setCellValue('B'.$i, $row['kolumna1']);
  32. $PHPExcel->getActiveSheet()->setCellValue('C'.$, $row['kolumna2']);
  33. $PHPExcel->getActiveSheet()->setCellValue('D'.$i, $row['kolumna3']);
  34. $PHPExcel->getActiveSheet()->setCellValue('E'.$i, $row['kolumna4']);
  35. $PHPExcel->getActiveSheet()->setCellValue('F'.$i, $row['kolumna5']);
  36. }


Pozdro.

PS. Mówiłem że to nie było jedyne rozwiązanie.
shadow1987
Witam
Próbowałem przekształcić tego php excel pod siebie lecz wywala mi :

Parse error: parse error in xxxxxxxxx\exportexc2.php on line 6
Gdzie tu błąd ?
  1. <?
  2. require "css/login.php";
  3. include 'PHPExcel.php';
  4. include 'PHPExcel/Writer/Excel5.php';
  5. $PHPExcel = new PHPExcel();
  6. $PHPExcel->getActiveSheet()->getStyle('A1:A4')->getFill()
  7. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  8. ->getStartColor()->setRGB('00FF00');
  9. $PHPExcel->getActiveSheet()->setCellValue('A1', 'Zestawienie pojazdów z dnia: '.$data.'');
  10. $PHPExcel->getActiveSheet()->getColumnDimension('A')-> setAutoSize(true);
  11. $PHPExcel->getActiveSheet()->getStyle('A1:A2')->getFont()->setBold(true);
  12.  
  13.  
  14. $PHPExcel->getActiveSheet()->getStyle('B1:G1')->getFill()
  15. ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
  16. ->getStartColor()->setRGB('FFC000');
  17. $PHPExcel->getActiveSheet()->getColumnDimension('B')-> setAutoSize(true);
  18. $PHPExcel->getActiveSheet()->getColumnDimension('C')-> setAutoSize(true);
  19. $PHPExcel->getActiveSheet()->getColumnDimension('D')-> setAutoSize(true);
  20. $PHPExcel->getActiveSheet()->getColumnDimension('E')-> setAutoSize(true);
  21. $PHPExcel->getActiveSheet()->getColumnDimension('F')-> setAutoSize(true);
  22. $PHPExcel->getActiveSheet()->getColumnDimension('G')-> setAutoSize(true);
  23. $PHPExcel->getActiveSheet()->setCellValue('B1', 'Odzial');
  24. $PHPExcel->getActiveSheet()->setCellValue('C1', 'Nazwa');
  25. $PHPExcel->getActiveSheet()->setCellValue('D1', 'Marka Typ');
  26. $PHPExcel->getActiveSheet()->setCellValue('E1', 'Numer Rejestracyjny');
  27. $PHPExcel->getActiveSheet()->setCellValue('F1', 'Numer Umowy');
  28. $PHPExcel->getActiveSheet()->setCellValue('G1', 'Opis');
  29. connection();
  30.  
  31. $sql = "SELECT COUNT(*) , odzial , nazwa , Marka_typ , Nr_rej ,nr_umowy , opis FROM naprawy WHERE stan_pojazdu= 'Serwis' AND data_przyj_do_serw= CURDATE() GROUP BY odzial, nazwa, Marka_typ, Nr_rej, nr_umowy ,opis ";
  32. $q = mysql_query($sql) or die(mysql_error());
  33. $ile = mysql_num_rows($q);
  34. $wiersz_start = 2;
  35. for($i = $wiersz_start; $i < $ile + $wiersz_start; $i++) {
  36. $row = mysql_fetch_array($q);
  37. $PHPExcel->getActiveSheet()->setCellValue('B'.$i, $row['odzial']);
  38. $PHPExcel->getActiveSheet()->setCellValue('C'.$i, $row['nazwa']);
  39. $PHPExcel->getActiveSheet()->setCellValue('D'.$, $row['Marka_typ']);
  40. $PHPExcel->getActiveSheet()->setCellValue('E'.$i, $row['Nr_rej']);
  41. $PHPExcel->getActiveSheet()->setCellValue('F'.$i, $row['nr_umowy']);
  42. $PHPExcel->getActiveSheet()->setCellValue('G'.$i, $row['opis']);
  43. }
  44.  
  45. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.