Witam,

może ktoś z was pracował z tą klasą Spreadsheet_WriteExcel. Jest z nią problem. Mianowicie dopóki baza nie więcej niż 50000-60000 rekordów wszystko działa ok. Jak jest powyżej to excel nie chce czytać takowego pliku i wywala komunikat o bledzie. Pierwszy error to "brak dostępu test.xls. ...", a następnie po kliknięciu anuluj dziennik napraw informuje mnie, że:

Kod
Dziennik napraw pliku programu Microsoft Office Excel

Wykryto błędy w pliku 'C:\Documents and Settings\User\Pulpit\test.xls'
Następująca lista to lista napraw:

Uszkodzenie pliku było na tyle poważne, że nie można było dokonać naprawy. Program Excel próbował odzyskać formuły i wartości, ale część danych może być utracona lub uszkodzona.


Nie ma problemu z tworzeniem dodatkowych zakładek. Tak jakby problem polegał na tym, że klasa nie może przełknąć takiej ilości danych.

Mój kod php.:

  1. <?
  2. require_once('Worksheet.php');
  3. require_once('Workbook.php');
  4.  
  5. function HeaderingExcel($filename) {
  6. header('Content-type: application/vnd.ms-excel');
  7. header('Content-Disposition: attachment; filename=$filename');
  8. header('Expires: 0');
  9. header('Cache-Control: must-revalidate, post-check=0,pre-check=0');
  10. header('Pragma: public');
  11. }
  12.  
  13. //HTTP headers
  14. HeaderingExcel('test.xls');
  15.  
  16. // Creating a workbook
  17. $workbook = new Workbook('-');
  18.  
  19.  
  20. $ile_wpisow = mysql_num_rows(mysql_query('SELECT * FROM tabela'));
  21.  
  22. $max_wpisow = 60000;
  23. $ile_petli = ceil($ile_wpisow/$max_wpisow);
  24.  
  25. $i = 0;
  26.  
  27. for ($a=1; $a <= $ile_petli; $a++){
  28.  
  29.  
  30. $wiersz = 0;
  31. $kolumna = 0;
  32. $limit = $i.', '.$max_wpisow*$a;
  33.  
  34. if ($i == 0) $worksheet1 =& $workbook->add_worksheet('1');
  35.  
  36. $dane2 = mysql_query('SELECT * FROM tabela LIMIT $limit');
  37.  
  38. while ($dane = mysql_fetch_array($dane2)){
  39. $worksheet1->write_string($wiersz, $kolumna, $dane[1]);
  40. $worksheet1->write_number($wiersz, $kolumna+1, $dane[2]);
  41. $wiersz++;
  42. $i++;
  43. }
  44.  
  45.  
  46. }
  47.  
  48. $workbook->close();
  49. ?>


To jest wersja skrócona. Nie ma tu "rozwinięcia" dla dodatkowych zakładek. Z resztą jeżeli stworze proste zapytanie z jedną pętlą dla zapytania wyciągającego te 60000 wpisów to będzie to samo. Znaczy to samo dopóki nie ogranicze go dla powiedzmy 40000 wpisow.

Kurcze swoją drogą fajnie, że ta klasa daje możliwość tworzenia nowych zakładek, tylko co z tego jeżeli nie mogę wykorzystać całego skoroszytu smile.gif. Ew. jeżeli ktoś zna klasę, która ma podobne możliwości to proszę o jakieś namiary smile.gif.