Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHPExcel a polskie znaki
ladovnik
post 31.08.2010, 20:41:42
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Witam. Chciałem utworzyć arkusz kalkulacyjny z wykorzystaniem skryptu PHPExcel. Udało się, lecz przy wypełnianiu komórek w momencie pojawienia się polskiego znaku słowo jest urywane. Jak temu zaradzić?

Kod:
  1. $file_name='arkusz.xls';
  2.  
  3. // PHPExcel
  4. include 'PHPExcel/PHPExcel.php';
  5. include 'PHPExcel/PHPExcel/IOFactory.php';
  6.  
  7. $PHPExcel = new PHPExcel();
  8. $PHPExcel->removeSheetByIndex(0);
  9.  
  10. // Create sheet
  11. $Sheet=$PHPExcel->createSheet();
  12. $Sheet->setCellValue ('B2', 'Kolumna 1');
  13. $Sheet->setCellValue ('C2', 'Kolumna 2');
  14. $Sheet->setCellValue ('D2', 'Kolumna 3');
  15. $Sheet->setCellValue ('E2', 'Kolumna 4');
  16. $Sheet->setCellValue ('F2', 'Różnica');
  17.  
  18. $Sheet->getColumnDimension('C')->setWidth(12);
  19. $Sheet->getColumnDimension('E')->setWidth(12);
  20. $Sheet->getColumnDimension('F')->setWidth(12);
  21.  
  22. // Genere excel file
  23. header('Content-Type: application/vnd.ms-excel');
  24. header('Content-Disposition: attachment;filename="'.$file_name.'"');
  25. header('Cache-Control: max-age=0');
  26.  
  27. $Writer = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');
  28. $Writer->setTempDir("./");
  29. $Writer->save('php://output');


Pozdrawiam,
ladovnik

Ten post edytował ladovnik 1.09.2010, 12:40:04
Go to the top of the page
+Quote Post
-=Peter=-
post 31.08.2010, 20:50:39
Post #2





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Z tego co pamiętam (google mi trochę odświeżyło pamięć) to aby poprawnie zapisać ciąg znaków np. w utf-8 to trzeba zrobić:

  1. $writer->setVersion(8);//to wywołanie jest wbrew pozorom bardzo ważne ;)
  2. $arkusz->setInputEncoding('utf-8');


--------------------
Go to the top of the page
+Quote Post
ladovnik
post 1.09.2010, 12:33:11
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


W obu przypadkach mam błąd mówiący o nieistniejącej metodzie. Sprawdziłem w dokumentacji i wynika z niej, że metoda setInputEncoding należy do klas PHPExcel_Reader_CSV oraz PHPExcel_Reader_SYLK jednak nie wiem co ich wykorzystanie by dało, skoro ja zapisuję, a nie odczytuję plik. Natomiast metoda setVersion w ogóle nie istnieje. Dane według dokumentacji najnowsze wersji, czyli 1.7.4.

Dodałem do pierwszego posta mój kod.

Ten post edytował ladovnik 1.09.2010, 12:40:39
Go to the top of the page
+Quote Post
Pilsener
post 1.09.2010, 14:22:58
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Excel pachnie windowsem, zatem musisz przekonwertować stringi na kodowanie windows zanim wyślesz je do metody zapisującej plik xls.
Go to the top of the page
+Quote Post
ladovnik
post 1.09.2010, 16:11:59
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Skonwertować stringi na kodowanie windowsowe... no tak, tylko jak to zrobić w przypadku tej klasy?
Go to the top of the page
+Quote Post
Pilsener
post 1.09.2010, 20:36:06
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Klasa sama tego nie zrobi, bo służy tylko do zapisu, musisz sam przekonwertować stringi korzystając z funkcji iconv czy dodatku mb_* http://pl2.php.net/manual/en/ref.mbstring.php

Ale jest niuans: z kodowaniem windows mogą być problemy, można też przekonwertować UTF na ISO a potem podmienić odpowiednie znaki funkcją strtr.
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: 27.04.2025 - 06:39