php және Excel: кіріспе

  • avatar
  • PHP / 26 қаңтар 2015, 01:04
  • 1785
Ассалам алейкум.
Әне жазамын, міне жазамын деп жүргенде бір жыл да өтіп кетіпті. Сонымен, сіздердің назарыңызға PhpExcell плагині туралы мақаланы ұсынамын. Ол плагинды мына ресурстан phpexcel.codeplex.com .zip форматында жүктеп алуға болады. Архивтың ішінде документация, мысалдар және плагинның өзі орналасқан. Қысқаша айтқанда бұл плагин php арқылы excell файлдарымен жұмыс жасауға арналған. Оны оқиды, есептейді және жазады. Бұның бәрі ООП мәнерінде іске асады. (Енді ООП-ны тусінбейтіндерге қиындау болады, сондықтан осы сала туралы толығырақ оқып алуға кеңес беремін.)
Бұл плагинды қай жерінен түсіндіріп бастаған дұрыс болады екен??
Excell файл ол кітап болып есептеледі, ал кітап парақшаларға бөлінеді, парақшалар өз алдына ұяшықтарға бөлінеді. Барлық есептер сол ұяшықтармен есептеледі. Ал біздің плагин бұның бәрін бір объектіге аударады да, әрі қарай сол объектімен жұмыс кетеді.
Кітап — объект, ал парақшалар (соған тиісті ақпараттар) және ұяшықтар (солардың ішіндегі ақпараттар) — объектінің қасиеттері. Кітаптың атауын, авторын, өзгерткен қолданушыны, сипаттамасын, тақырыбын, кілт-сөздерді және тағы басқа ақпараттар объект әдістері арқылы өзгертіледі. Ұяшықтарға және парақшаларға да арнайы әдістер арқылы қол жетеді.

Мысал ретінде қысқаша кодты қарастырайық:

// жаңа  PHPExcel объектісін жасаймыз (Excell кітапшасының объекті )
$objPHPExcel = new PHPExcel();


Кітаптың мәліметтерін өзгерту үшін төменде көрсетілген объектінің әдістерін қолданамыз.

// Кітапшаның атрибуттарын өзгертеміз 
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw") 
		->setLastModifiedBy("Maarten Balliauw") 
		->setTitle("PHPExcel Test Document") 
		->setSubject("PHPExcel Test Document") 
		->setDescription("Test document for PHPExcel, generated using PHP classes.") 
		->setKeywords("office PHPExcel php") 
		->setCategory("Test result file");


Ал парақшаның ұяшықтарының мәліметтерін өзгерту үшін мынадай объекттің әдістері қолданылады.

// Кітапшаға ақпарат енгізу жолдары
$objPHPExcel->setActiveSheetIndex(0) 
            ->setCellValue('A1', 'Hello') 
            ->setCellValue('B2', 'world!') 
            ->setCellValue('C1', 'Hello') 
            ->setCellValue('D2', 'world!'); 

Бір Excell кітапта бірнеше парақшалар болады. Керек парақшаны индекс арқылы табуға болады немесе атауы бойынша. Индекс бойынша оңай көрінеді. Ал керек ұяшықты кәдімгі Excell координаттары бойынша табасың.

Осындай қарапайым әдістер арқылы php-де Excell файлымен қалаған жумысты атқаруға болады: документтің мәліметтерін оқуға немесе өзгертуге, парақшалардың мәліметтерін оқуға немесе өзгертуге, парақшаны қосуға немесе жоюға, тіпті пароль қоясың ба, бәрін істеуге болады. Ал ұяшықтарға келсек, оларға валидация, формула қоюға, форматты өзгертуге (шрифтын, көлемін, түсін, тордың көлемін) болад.
Сайтта немесе веб-қосымшада осынша функция болғаны өте ыңғайлы. Кез-келген отчеттарды, немесе қандай да болмасын тізімдерді Excell файлда шығарып берсе, сайт кішкене «солидно» көрінеді қолданушыға да :)
Әрине бұның бәрін іске асыру үшін әдістерді білу қажет. Осы плагинмен қалай жумыс жасау керектігі документациясында көрсетілген. Документацияда плагин керемет түсіндірілген, барлығы өз орнында, керек ақпаратты табуға болад, тек қана ағылшынша. Солай, егер плагин туралы сұрақтар болса осы постқа комент ретінде сұрақ қойсаңыз болад, қолымнан келген көмекті көрсетемін. Плагинды жүктеп алғанда, архив ішінде көптеген мысалдар бар (жоғарыда көрсетілген мысалдар сол жақтан алынған). Сол мысалдармен жұмысты бастаған дұрыс, себебі әрі қарай қалай жұмыс жасау бағытын беред.

Жоғарыда көрсетілген мысалдар PHPExcel класстың объектісіне қатысты кодтар, объект тек қана ОЗУ-да (жедел жадыда) тұрады. Ал егер сол кітапшаны әрі қарай қолданышуға жүктеуге берер болсақ, немесе сайтта сақтап қоятын болсақ оны файлға жазу керек. Сол файлды жасау үшін плагинның PHPExcel_IOFactory классын іске қосу керек. Бұл класс файлға жазуға жауапты. Мысалы

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save( 'document.xlsx');


Айта кететін ақпарат, осы класс арқылы Excel файлды сайтқа жүктеуге болады. Оның ішіндегі информацияны автоматты түрде базаға жазуға болады, немесе басқа мақсаттарда қолдануға болады. Ол тақырыпты келесі мақалада талқылаймын, себебі айтатын түсіндіретін жерлері өте көп.

  • +7
6 пікір
raimbek
Түсінікті жазылыпты, келесі мақаланы күтеміз. Мені өте көп мәліметтерді (мысалы 10000 нан артық қатар) қалай енгізуге болатыны қызықтырады. Онша мәліметті ОЗУға салсақ жағдайымыз қиын болады. Сол жағынан қандай шешім бар екенін көргім келеді.
shainek
$objWriter->save( 'document.xlsx');

не ма, серверде сақтамай бірден пайдаланушыға беруге бола ма?
tas362
тек серверге сақтайды
vfvtnjd
стандартты php://output поток аркылы:
$objWriter->save('php://output');
shainek
үлкен рақмет, мен мына потоктарды білмеген екенмін.
tas362
Пайдаланушыға бірден беруге болад. Ол туралы келесі мақалада жазам (мысалдардың ішінде ол скрипт бар негізі)
Тек тіркелген қолданушылар ғана пікір қалдыра алады.