Excel (xls) ražošana ar PHP - UTF 8 atbalsts

Jānis Rubļevskis (koko) // 2009. gada 11. augustā, 16:26 // #Datori // 10 komentāri 

Ja tu neesi programmētājs/a, tad tālāk vari arī nelasīt, jo saprotams būs tikai profesionāļiem, kā arī raksts tapis kā piezīme pašam sev!

Sākšu ar atkāpi - uztaisīt vienkāršu excel failiņu ar PHP nav nemaz tik grūti:

1) Izveidojam parastu html, kurā ir tabula (bez doctype utt. - vienkārši head, title, body, table un viss;
2) Šo html padodam, headerī (ar header funkciju) kā excel failu "Content-type: application/x-msexcel";
3) Padotajam failam norādam paplašinājumu xls
Problēmas sākas, tad, kad tajā excel failā grib izdarīt nedaudz vairāk kā iegrūst tikai datus, piemēram, apvienot celles, norādīt cellēm parametrus (fonts, krāsa, lielums, formāts utt.), ielikt formulas un citas tamlīdzīgas lietas. Lai to izdarītu, jāizmanto nedaudz smagāki paņēmieni. Es tad pastāstīšu par vienu no tiem.

Es izmantoju Pear Spreadsheet excel writer, kas ģenerē MS Excel 97 compatible datni. Pamatos neieslīgšu, tāpēc par iespējām var pārliecināties Spreadsheet Excel Writer dokumentācijā, kā arī uzinstelēšana ir ļoti elementāra. Problēma sākas brīdī, kad grib izveidot failu, kas satur UTF-8 datus un ir lielāks par 200 rindām vai 30Kb., jo šai Pear klasei ir nelielas problēmas šajā sakarā. Risinājums:

Te visu var izlasīt, bet, tā kā zinu, ka tu esi slinks/a, tad paskaidrošu sīkāk.

1) Nokačājam sapačoto failu no šejienes vai arī no mana spoguļa;
2) atrodam uz servera, kur nu ir mūsu pačojamais fails. (linuxim: locate Workbook.php);
3) Sapačojam, aizstājot esošo Workbook.php ar jauno, 1. punktā iegūto. Protams, iesaku veco nobekapot katram gadījumam;
4) Būtībā nebūtu slikti pārstartēt arī apaci (linux parasti no root lietotāja vai caur su vai sudo: /etc/init.d/apache2 reload
Vuala!

P.S. Sirsnīgos pateicības vārdus varat nogādāt vērtīgu papīrīšu formā pa pastu vai alus formā ar kurjeru!

Komentāri

es šitai huiņai cauri izgāju pirms 3 gadiem, varēji tak paprasīt :)

Es tak php.lv (k)anālā prasīju, bet tu laikam tur neesi tāds aktīvists :D Nu po - galvenais, ka izurbos cauri. Galvenais, ka tie pearisti to gļuku kopš 2k4.gada nevar integrēt labojumos :D

jaa, pirms gadiem laikam diviem man šitas bija. tur vnk tur vienu rindiņu vajadzēja pieraxtīt, ja nemaldos nesakarīgu. kaut kas liidziigs $writer->version(...); un kaa pa briinnumu peexhnji gaaja arii utf-8.

$workbook->setVersion(8);

Bet tas strādā tikai pie maziem failiem. Pie lieliem ir jāpačo Workbook.php.

es ircentā netupu jau pāris gadus, tāpēc neatbildēju tev :D

Excelim taču ir arī XML formāts, kāpēc neizmanto to? Nu labi, nebūs ar .xls paplašinājumu, bet jebkurš Windows ar Office tāpat zinās, kā atvērt.

ShB, nu, pirmkārt, mums ir valsts, kurā ir iestādes, kurām it risinājumi ir galīgā pakaļā un, kuras dzīvo aizvēsturē un nevar xml atvērt, otrkārt, vai tad tam xml var formulas sakarīgi iebarot? (neesmu gan pētījis, bet dikti šaubos)

Nu, ja sēž vēl uz Excel 97 tad varbūt arī nevar atvērt, iespējams. Bet par saturu nezinu, kā no php puses, bet tie dokumenti, ko redzēju es (lielas starptautiskas kompānijas kaut kādi finansu/grāmatvedības/pamatlīdzekļu aprēķinu tāmes uz n-tajiem šītiem un bez vismaz 100 gramiem neaptveramām aprēķinu formulām un formatējumiem) nebija nekādi bērna šļupsti. Un prasība par XML formāta izmantošanu bija tieši no "augšas" (vietējie daudz labprātāk būtu iztikuši ar XLS) puses, tā kā diez vai var būt kāda runa par to, ka tam formātam kaut ko nevarētu iebarot vai pēc tam izpiest atkal ārā.

Konvertet failus uz pdf var ar gatavam klaseem vai kadu extension prieks php :), vai ari caur comand line programmu, tas iespejams butu visvieglak!

Sunny, nav jau problēmu uzģenerēt to pdf, bet šajā gadījumā prasība bija excel! ;)

Pdf man vislabāk sanāk ar TCPDF ;)

Paud savu subjektīvo viedokli:

Visi lauki (izņemot interneta vietni) aizpildāmi obligāti!
E-pasts publiski netiks parādīts.
Zinot vairākumu, komentāros tagi netiek atrādīti kā tagi. Linki automātiski pārveidosies par spiežamiem (cerams).
Bloga īpašnieks patur tiesības ļaunus komentārus dzēst vai pārveidot cilvēkiem patīkamākā formā, bet tajā pašā laikā neatbild par komentāru saturu.