Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHPExcel
Forum PHP.pl > Forum > PHP
rad11
Witam mam problem kiedy probuje zapisac plik .xls ajaxem otrzymuje w wyniku rozkrzaczone dane typu

  1. ��ࡱ�;�� 
  2. ���� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
  3.  !"#$%&'()*+,-./0123456789:;<=>����@AB���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Oh��+'��0�@Hh� �
  4. ���Untitled SpreadsheetUnknown CreatorUnknown Creator@��4)��@��4)�� �
  5. ��B�=�%r8X"1&#65533;�Calibri��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � ��� � � � �����8�������������������������������3f������ff���f����������������������������������̙��̙3f�3���������fff����3f3�f333�3�3f33�333�b Worksheet��g���V<<
  6.  

kiedy skrypt wywoluje bez ajaxa to dobrze zapisuje.
To kod phpexcela:

  1. $PHPExcel = new PHPExcel();
  2. //statyczne komorki
  3. $PHPExcel->getActiveSheet()->setCellValue('A1', 'CAMPAIGN NAME');
  4. $PHPExcel->getActiveSheet()->setCellValue('B1', 'PRODUCT NAME');
  5. $PHPExcel->getActiveSheet()->setCellValue('C1', 'CREATIVE VARIANT');
  6. $PHPExcel->getActiveSheet()->setCellValue('D1', 'CAMPAIGN PARTNER');
  7. $PHPExcel->getActiveSheet()->setCellValue('E1', 'ASSET TYPE + DIMENSIONS');
  8. //autosize
  9. $PHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  10. $PHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  11. $PHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  12. $PHPExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  13. $PHPExcel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  14. //zamrozenie
  15. $PHPExcel->getActiveSheet()->freezePane('F2');
  16.  
  17. foreach ($langs as $i => $value) {
  18. $PHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i + 5, 1, $value);
  19. }
  20.  
  21. $PHPExcel->getActiveSheet()->setCellValueByColumnAndRow(($i++) + 6, 1, "MASTER LANG");
  22. $PHPExcel->getActiveSheet()->setCellValueByColumnAndRow(($i++) + 6, 1, "DATE OF BRIEF");
  23. $PHPExcel->getActiveSheet()->setCellValueByColumnAndRow(($i++) + 6, 1, "CAMPAIGN GUIDE AVA​ILABILITY DATE");
  24. $PHPExcel->getActiveSheet()->setCellValueByColumnAndRow(($i++) + 6, 1, "NEW EXPECTED COMPLETION");
  25. $PHPExcel->getActiveSheet()->setCellValueByColumnAndRow(($i++) + 6, 1, "COMMENTS");
  26.  
  27. header("Content-Type: application/vnd.ms-excel; charset=utf-8");
  28. header("Content-Disposition: attachment; filename=abc.xls");
  29. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  30. header("Cache-Control: private", false);
  31.  
  32. $writer = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');
  33. $writer->save('php://output');

Co moze byc nie tak?

Problem prawie rozwiazany tylko nie rozumiem dlaczego tak sie dzieje po zmianie

  1. writer->save('php://output');

na
  1. writer->save('plik.xls');

plik sie zapisuje w glownym folderze aplikacji dlaczego tak sie dzieje ?
nospor
Ja nie bardzo rozumiem jak ty w ogole ajaxem ten plik chciales zwracac z naglowkami.
Powinienies normalnie zrobic pełne oddzielne żądanie a nie ajax i wszystko powinno ci działać bez problemu.
rad11
Problem jest wlasnie taki ze konkretne dane do wstawienia w plik sa przeslane ajaxem w poscie.
Turson
Czemu akurat ajaxem a nie normalnie? Jak stworzysz plik xls nawet dynamicznie i dasz go do pobrania, a potem jakiś exit to tak czy inaczej przeglądarka nie przejdzie pod tamten adres tylko pozostanie na aktualnym
rad11
Dane musza byc ajaxem przeslane nie ma innej rady. Czyli co chcesz przez to powiedziec ?
Turson
Jeżeli w pliku index.php przesyłasz formularzem dane do excel.php to tam generujesz xls zapisujesz/dajesz do ściągnięcia i jak dasz dalej die() lub exit() to nie powinno przejść na inną stronę i pozostać na index.php
rad11
Tak ale tu nie chodzi o to aby pozostac na stronie itp. smile.gif tu chodzi tylko o to ze od frontu dostaje gotowa paczke do wygenerowania w pliku i musze to dostac postem przy uzyciu ajax`.

Panowie a napotkalem na kolejny problem mam takie dwie przykladowe tablice:

  1. //ilosc komorek do zlaczenia
  2. $rowspan = array(
  3.  
  4. '0' => '6',
  5. '1' => '4',
  6. '2' => '12'
  7.  
  8. );
  9.  
  10. //nazwy komorek
  11. $merge = array(
  12.  
  13. '0' => 'nazwa1',
  14. '1' => 'nazwa2',
  15. '2' => 'nazwa3'
  16.  
  17. );

metoda do scalania
  1. $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:C1');

I chcialbym zrobic dynamicznie na podstawie $rowspan scalanie komorek tak aby nazwa1 byla scalona na 6 komorek czyli od A1:A6, nazwa2 od A6:A10, nazwa3 A10:A22 itd. Jakies pomysly ? Chodz moze tez byc tylko na podstawie danych rowspan bez uwzgledniania tabeli $merge
nospor
Cytat
tu chodzi tylko o to ze od frontu dostaje gotowa paczke do wygenerowania w pliku i musze to dostac postem przy uzyciu ajax
No ale skoro ślesz to razem z naglowkami, wiec wynika z tego ze user ma to sobie poprostu zapisac na dysku. Jakby bylo inaczej to bys nie slal tego z naglowkami.
Napisz dokladnie co chcesz zrobic, bo moze poprostu źle do tego podchodzisz
rad11
Tutaj jest sytuacja taka, ze jest na froncie tabela przypominajaca excela sa tam przerozne dane, i roznie generowane i excela ma wygladac dokladnie tak jak ta tabela htmlowa. Pobranie danych z bazy odpada bo to nie moj kod ma duzo linijek i jest wiele rzeczy ktorych nie rozumiem w nim tymbardziej ze nie mam dostepu w tej chwili do osoby ktora pisala to, ale mam osobe ktora moze mi przeslac z frontu te dane juz gotowe. Mniej wiecej tak to sie przedstawia.
nospor
No dobra, no i czemu nie może tu byc normalne żądanie tylko robisz to AJAXem? Już ci napisano, że normalnie żądanie nie spowoduje wyjścia z aktualnej strony.
rad11
Tak jak mowie w tych skryptach były robione kombinacje alpejskie i nie jestem w stanie wyciągnąć danych do przesłania normalnym żądaniem.
nospor
Skoro jestes je wstanie wyciagnac, by przeslac AJAXem, to naprawde nie ma zadnego problemu by wyciagnac je by przeslac normalnym żądaniem.....
Wyciaganie danych robisz tak samo. A potem zamiast AJAXem, to slesz formem te dane co masz wyslac. No tu nie ma zadnego problemu.
rad11
Dobrze sprawdze Twoj sposob ale to i tak nic nie zmieni bo dane sie zapisuja do pliku tylko ze musze podac dokladna sciezke zapisu.
nospor
Nie bardzo rozumiem. Ty co najwyzej mozesz zapisac plik na serwerze a nie na kompie klienta. Z pierwszego postaw wynikalo, ze ty chcesz by to klient sobie zapisywal u siebie na kompie. Jesli Ty to chcesz zapisywac tylko na serwerze, to faktycznie nie ma co juz przerabiac tego skryptu.
rad11
No tak bo to klient sobie ma kliknac w przycisk i plik ma sie zapisac u niego.
Turson
Cały czas drążymy temat, że zapisać u klienta też możesz bez używania ajaxa
nospor
No to jak tak, no to musisz zrobic oddzielnym żądaniem smile.gif

Od biedy, możesz ten plik zapisywac na serwerze, a klientowi podać linka do tego pliku lub przekierowac na ten plik po poprawnym zakonczeniu ajax.
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.