Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHPExcel, Problem z zapisem ajax
rad11
post 15.07.2014, 18:22:12
Post #1





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
nospor
post 15.07.2014, 18:57:47
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rad11
post 15.07.2014, 19:05:59
Post #3





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Problem jest wlasnie taki ze konkretne dane do wstawienia w plik sa przeslane ajaxem w poscie.
Go to the top of the page
+Quote Post
Turson
post 15.07.2014, 19:07:42
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
rad11
post 15.07.2014, 19:10:24
Post #5





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dane musza byc ajaxem przeslane nie ma innej rady. Czyli co chcesz przez to powiedziec ?

Ten post edytował rad11 15.07.2014, 19:10:44
Go to the top of the page
+Quote Post
Turson
post 15.07.2014, 19:14:09
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
rad11
post 15.07.2014, 19:59:14
Post #7





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował rad11 16.07.2014, 08:35:59
Go to the top of the page
+Quote Post
nospor
post 16.07.2014, 08:26:33
Post #8





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rad11
post 16.07.2014, 08:31:14
Post #9





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post 16.07.2014, 08:56:51
Post #10





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rad11
post 16.07.2014, 09:11:42
Post #11





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Tak jak mowie w tych skryptach były robione kombinacje alpejskie i nie jestem w stanie wyciągnąć danych do przesłania normalnym żądaniem.
Go to the top of the page
+Quote Post
nospor
post 16.07.2014, 09:13:29
Post #12





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rad11
post 16.07.2014, 09:22:35
Post #13





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dobrze sprawdze Twoj sposob ale to i tak nic nie zmieni bo dane sie zapisuja do pliku tylko ze musze podac dokladna sciezke zapisu.
Go to the top of the page
+Quote Post
nospor
post 16.07.2014, 09:24:20
Post #14





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
rad11
post 16.07.2014, 09:25:17
Post #15





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No tak bo to klient sobie ma kliknac w przycisk i plik ma sie zapisac u niego.
Go to the top of the page
+Quote Post
Turson
post 16.07.2014, 09:26:10
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Cały czas drążymy temat, że zapisać u klienta też możesz bez używania ajaxa
Go to the top of the page
+Quote Post
nospor
post 16.07.2014, 09:26:40
Post #17





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 16:42