Pół dnia w plecy nie bardzo wiem czemu.
Dopóki nie używam PDO i nie chcę pobierać wartości z bazy, to wszystko generuje się ok.
Jak tylko dorzucam obsługę bazy danych i pobierania wartości wygenerowany plik xls, otwierany przez excela 2010 pokazuje komunikat
"Ten dokument jest uszkodzony..."

Co jest źle? Bo ja już wysiadam.

Dodatkowe: problemem jest @ w adresie email, coś z kodowaniem pewnie.

W bazie jest latin2_general_ci

Plik generuje sie w cp1250.

  1. <?php
  2. require("php/config.inc.php");
  3. $db = new PDO('mysql:host=localhost;dbname='.DB_DATABASE, DB_USER, DB_PASS);
  4. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.  
  6. require_once("Spreadsheet/Excel/Writer.php");
  7.  
  8. $xls = new Spreadsheet_Excel_Writer();
  9.  
  10. $xls->send('raport.xls');
  11.  
  12. $sheet = $xls->addWorksheet('Lista WZ');
  13. $format = $xls->addFormat();
  14. $format->setBold();
  15. $format->setSize('12');
  16.  
  17. $sheet->write(0, 0, 'Login', $format);
  18. $sheet->write(0, 1, 'Nazwa klienta', $format);
  19. $sheet->write(0, 2, 'Adres dostawy', $format);
  20. $sheet->write(0, 3, 'Nazwa nagrody', $format);
  21. $sheet->write(0, 4, 'Ilość', $format);
  22. $sheet->write(0, 5, 'Punkty', $format);
  23.  
  24. $db->exec('SET NAMES cp1250;');
  25. //$db->exec("set character set cp1250");
  26. $x = $db->query('SELECT `EMAIL` FROM `USERS`');
  27. foreach($x as $res)
  28. {
  29. $i++;
  30. $sheet->write($i, 0, $res['email']);
  31. $sheet->write($i, 1, $res['email']);
  32. $sheet->write($i, 2, $res['email']);
  33. $sheet->write($i, 3, $res['email']);
  34. $sheet->write($i, 4, $res['email']);
  35. $sheet->write($i, 5, $res['email']);
  36. }
  37. unset($x);
  38. unset($db);
  39.  
  40. //szerokość kolumny 0
  41. $sheet->setColumn(0, 0, 20);
  42.  
  43. //szerokość kolumn 1, 2, 3
  44. $sheet->setColumn(1, 3, 40);
  45.  
  46. $xls->close();
  47.  
  48. ?>