Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php -> Excel
Forum PHP.pl > Forum > Gotowe rozwiązania
wejder
Hej.

Jest sobie kod :

  1. <?php
  2. header(&#092;"Content-type: application/vnd.ms-excel\");
  3. header(&#092;"Content-Disposition: attachment; filename=\"test.xls\"\");
  4. $buffer .= $reports;
  5. ?>



gdzie pod $reports

jest jakaś HTMLowa tabelka <table><tr><td>Nazwa</td><td>3,432</td></tr></table>

znawca tematu wie, że wchodząc na taką stronę otworzy mi się ona w Excelu...jako tabelka...z liczbami...

Tylko już w excelu to różnie bywa z tymi danymi....liczby są jako text a nie jako liczba...i to jest pierwszy mój problem...jak wymusić żeby excel traktował liczbę jako liczbę... ?


A drugi problem....otwieranie "<tr><td>" to nie jest zbyt optymalny sposób przy dużych tabelach...

jak w phpie zrobić odstęp i przejście do następnej linii żeby excel traktował to jako nową kolumnę lub jako nowy wiersz...

myślałem nad

  1. <?php
  2. str_replace('</td>',XXXX,$reports);
  3. str_replace('</tr>',YYYY,$reports);
  4. ?>



tylko co wpisać zamiast XXXX i YYYYY ?


pozdro 600

----------------------
Jeśli chcemy dać kod na forum umieszczamy go
w odpowiednich tagach BB Code, tym
razem poprawiłem, ale na przyszłość proszę
się do tego stosować : )
---
~strife
vdr
do nastepnej kolumny mozna uzyc \t a do nastepnego wiersza \r (przynajmniej u mnie tak dziala)
sf
Na moim blogu masz przykład jak takie dane zaimportować do excela.

csv excel
eai
http://www.codeplex.com/PHPExcel/
siemakuba
Cytat(wejder @ 31.10.2004, 17:36:14 ) *
Tylko już w excelu to różnie bywa z tymi danymi....liczby są jako text a nie jako liczba...i to jest pierwszy mój problem...jak wymusić żeby excel traktował liczbę jako liczbę... ?


http://php5.pl/php/generowanie_plikow_xls_...technologii_com - tu napisane jest o stylach dla XLS w MS Excel które umożliwiają zmuszenie Excela do traktowania danych w określony sposób. Zapewne nie wszystko wyjaśnione dokładnie, ale na pewno dobry punkt zaczepienia.

pozdr.
toolmaniak
Czasem można zobaczyć w kod, jak excel generuje zrzuty archiwów xls w html-u właśnie. Ja nie wiem czemu nie korzystałem do tej pory z zewnętrznych klas, ale wolałem sam mieć nad wszystkim kontolę, więc napisałem własną klasę pod swój CRM która tworzy mi dumpy z mysql-a w excelu właśnie z róznymi opcjami jak filtry, wykres a nawet makro w visual basicu. Wcześniej robiłem to przykładowo tak:

  1. <?
  2.  
  3. session_name('MARKETING');
  4. header("Content-Transfer-Encoding: base64");
  5. header("Content-Type: text/multipart");
  6. header("Content-Type: application/vnd.ms-excel");
  7. header("Content-Disposition: attachment; filename=korespondencja_seryjna.xls");
  8. header("Pragma: private");
  9. header("Expires: 0");
  10. header("Cache-Control: private, must-revalidate");
  11.  
  12. ?>
  13. <html xmlns:o="urn:schemas-microsoft-com:office:office"
  14. xmlns:x="urn:schemas-microsoft-com:office:excel"
  15. xmlns="http://www.w3.org/TR/REC-html40">
  16.  
  17. <head>
  18. <meta http-equiv=Content-Type content="text/html; charset=windows-1250">
  19. <meta name=ProgId content=Excel.Sheet>
  20. <meta name=Generator content="Microsoft Excel 10">
  21. <link rel=File-List href="Zeszyt2_pliki/filelist.xml">
  22. <link rel=Edit-Time-Data href="Zeszyt2_pliki/editdata.mso">
  23. <link rel=OLE-Object-Data href="Zeszyt2_pliki/oledata.mso">
  24. <!--[if gte mso 9]><xml>
  25.  <o:DocumentProperties>
  26. <o:Author>Luki</o:Author>
  27. <o:LastAuthor>Luki</o:LastAuthor>
  28. <o:Created>2007-04-24T21:27:58Z</o:Created>
  29. <o:LastSaved>2007-04-24T21:29:34Z</o:LastSaved>
  30. <o:Company>XXX</o:Company>
  31. <o:Version>10.2625</o:Version>
  32.  </o:DocumentProperties>
  33.  <o:OfficeDocumentSettings>
  34. <o:DownloadComponents/>
  35. <o:LocationOfComponents HRef="file:///D:"/>
  36.  </o:OfficeDocumentSettings>
  37. </xml><![endif]-->
  38. <style>
  39. <!--table
  40. {mso-displayed-decimal-separator:",";
  41. mso-displayed-thousand-separator:" ";}
  42. @page
  43. {margin:.98in .79in .98in .79in;
  44. mso-header-margin:.5in;
  45. mso-footer-margin:.5in;}
  46. tr
  47. {mso-height-source:auto;}
  48. col
  49. {mso-width-source:auto;}
  50. br
  51. {mso-data-placement:same-cell;}
  52. (.........)
  53. w tym miejscu dalszy kawałek kodu
  54.  
  55. /*
  56. $current_datas = mysql_query("SELECT firma,ulica,kod_pocztowy,miejscowosc from klienci where id='".$curr_customers[0]."'");
  57. $datas_listing = mysql_fetch_array($current_datas);
  58. */
  59.  
  60. $query=mysql_query('SELECT * FROM tmp Order By firma');
  61.  
  62. while ($row = mysql_fetch_array($query)) {
  63.  
  64. print "<tr height=85 style='height:63.75pt'>n";
  65. print "<td height=85 align=right style='height:63.75pt' x:num>".$row[0]."</td>n";
  66. print "<td>".$row[1]."</td>n";
  67. print " <td align=right x:num>".$row[2]."</td>n";
  68. print "<td>".$row[3]."</td>n";
  69. print " <td class=xl24 width=256 style='width:192pt'>".$row[4]."</td>n";
  70. print "<td class=xl24 style='mso-ignore:colspan'>".$row[5]."</td>n";
  71. print "<td class=xl24 width=256 style='width:192pt'>".$row[6]."</td>n";
  72.  print "</tr>n";
  73.  
  74. }
  75.  
  76. print "<![if supportMisalignedColumns]>n";
  77.  print "<tr height=0 style='display:none'>n";
  78.  print "<td width=66 style='width:50pt'></td>n";
  79.  print "<td width=256 style='width:192pt'></td>n";
  80.  print "<td width=83 style='width:62pt'></td>n";
  81.  print "</tr>n";
  82.  
  83.  
  84. //@mysql_query('Drop table if exists tmp');
  85. ?>
  86. <![endif]>
  87. </table>
  88.  
  89. </body>
  90.  
  91. </html>


I taki skrypt sprawował się świetnie w excelu, gdzie dodatkowo uruchamiał autofiltry do każdej kolumny, a i w innych rozwiązaniach jak OpenOffice też nie było problemu z jego implementacją.
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.