ផ្ទុកទិន្នន័យពី Excel ទៅ php ។ វិធីងាយស្រួលក្នុងការផ្ទេរទិន្នន័យតារាងពី PHP ទៅ Excel ។ នាំចេញទិន្នន័យពី MySQL ទៅ Excel ក្នុង PHP

(ទិន្នន័យដែលទទួលបានពីមូលដ្ឋានទិន្នន័យ mysql) ដើម្បីជោគជ័យ។ ខ្ញុំកំពុងប្រើ Zend Framework។ ខ្ញុំ​ត្រូវ​ធ្វើ​ការ​ផ្លាស់​ប្តូ​រ​មួយ​ចំនួន​ចំពោះ​ទិន្នន័យ​របស់​ខ្ញុំ​មុន​ពេល​នាំ​ចេញ​ទៅ excel ។ តាមពិតទៅ ខ្ញុំពិតជាត្រូវបង្កើតសៀវភៅសាច់ប្រាក់ប្រចាំខែ។

ខ្ញុំ​បាន​អាន​ឯកសារ​ជា​ច្រើន ប៉ុន្តែ​ឃើញ​ថា​ខ្លួន​ឯង​មាន​ភាព​រញ៉េរញ៉ៃ។ ខ្ញុំពិតជាមិនដឹងពីរបៀបចាប់ផ្តើម។ តើខ្ញុំពិតជាត្រូវការ PEAR មែនទេ? តើខ្ញុំត្រូវការផ្ទុកបណ្ណាល័យថ្នាក់ណាមួយទេ? តើ​មិន​មាន​វិធី​ងាយ​ស្រួល​ក្នុង​ការ​ធ្វើ​ដូច្នេះ​ទេ?

សូម​អរគុណ​ជាមុន

ខ្ញុំស្នើឱ្យអ្នកប្រើបណ្ណាល័យ PHPExcel ។ វាពិតជាមានថាមពលខ្លាំង គាំទ្រទម្រង់ច្រើន អាចធ្វើទ្រង់ទ្រាយដែលមើលឃើញ និងងាយស្រួលប្រើ។

អ្នកអាចស្វែងយល់បន្ថែមអំពីវានៅលើគេហទំព័ររបស់ពួកគេ៖ http://phpexcel.codeplex.com/ (PHPExcel បានផ្លាស់ប្តូរទៅ https://github.com/PHPOffice/PHPExcel រួចហើយ)

ឧទាហរណ៍នៃការប្រើប្រាស់៖

$objPHPExcel = ថ្មី PHPExcel(); /** អ្នកអាចកំណត់លក្ខណៈសម្បត្តិជាច្រើន */ $objPHPExcel->getProperties()->setCreator("ក្រុមហ៊ុនរបស់ខ្ញុំ") ->setLastModifiedBy("John Doe") ->setTitle("របាយការណ៍ប្រចាំឆ្នាំ") ->setSubject("ការលក់ ") -> setDescription("របាយការណ៍លក់ប្រចាំឆ្នាំដោយ John Doe") -> setCategory("ហិរញ្ញវត្ថុ"); /** ជ្រើសរើសសន្លឹកមួយ */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0); /** គ្រាន់តែកំណត់តម្លៃក្រឡា */ $activeSheet->setCellValue("A1", "ពហុវចនៈ");

អ្នក​អាច​ធ្វើ​បាន​ច្រើន​ទៀត ជា​ការ​អាន​ឯកសារ Excel កំណត់​រចនាប័ទ្ម​ដែល​មើល​ឃើញ បង្កើត​ក្រាហ្វ កន្សោម និង​ច្រើន​ទៀត។

ខ្ញុំបានសរសេររបាយការណ៍បំរែបំរួលសារពើភ័ណ្ឌចំនួន 94 ជួរ ដែលខ្ញុំយកទិន្នន័យពី MySQL (6kb + records ក្នុងមួយតារាង) បង្កើតអារេពហុវិមាត្រពីទិន្នន័យ MySQL ទាញពីតារាងច្រើន ហើយបន្ទាប់មកបោះចោលអ្វីៗទាំងអស់ទៅក្នុងជួរដេកមួយ ហើយបង្កើត .xls ដូច្នេះ៖

មិនត្រូវការផ្នែកបន្ថែមទេ។

ការព្រមានតែមួយគត់គឺថាខ្ញុំមិនទាន់បានគិតពីរបៀបបញ្ចេញ .xls ដោយគ្មាន Excel ដោយរាយការណ៍ថាទិន្នន័យអាចខូច ហើយខ្ញុំមិនបានព្យាយាមធ្វើទ្រង់ទ្រាយ ឬអ្វីស្មុគស្មាញជាងគ្រាន់តែ "នាំចេញ" ទិន្នន័យនោះទេ។ ជា​ការ​ពិត​ណាស់ ឯកសារ/ទិន្នន័យ​ត្រូវ​យល់ព្រម ប៉ុន្តែ​វា​បង្កើត​ការ​ព្រមាន​ពី Excel ។

កែសម្រួល៖ ខ្ញុំគួរកត់សម្គាល់ថា "ការដំឡើង" និង "បោះចោល" សំដៅទៅលើចំណុចខាងក្រោម៖ daniweb.com

អ្នកអាចប្រើបណ្ណាល័យ phpexcel ។ វាអនុញ្ញាតឱ្យអ្នកសរសេរ និងអានពីទម្រង់ឯកសារសៀវភៅបញ្ជីផ្សេងៗគ្នា

សម្រាប់ការរួមបញ្ចូល zend អ្នកអាចយកជំនួយពីតំណខាងក្រោម។

អ្នកអាចប្រើ CSV ដើម្បីធ្វើទ្រង់ទ្រាយដែលអាចនាំចូលបានសម្រាប់ Excel ។ នេះជាវិធីងាយស្រួលបំផុតដើម្បីធ្វើវា។

CSV មើលទៅដូចនេះ៖

"មាតិកាក្រឡាទីមួយរបស់ខ្ញុំ", "មាតិកាក្រឡាទីពីររបស់ខ្ញុំ", "មាតិកាក្រឡាទីបីរបស់ខ្ញុំ" "ជួរទីពីរ មាតិកាក្រឡាទីមួយ", "ល", "ល។

ជួរនីមួយៗតំណាងឱ្យខ្សែអក្សរ Excel អ្នកដាក់មាតិកាក្រឡារវាងសញ្ញាសម្រង់ពីរហើយបំបែកពួកវាដោយសញ្ញាក្បៀស។ សូមប្រយ័ត្ន ប្រសិនបើអ្នកមានទិន្នន័យមួយចំនួនរបស់អ្នក វាអាចបំបែក CSV របស់អ្នក និងបង្កើតជួរថ្មីដែលមិនចង់បាន។

ជាមួយនឹង Google បន្តិច អ្នកនឹងរកឃើញវា៖ http://www.the-art-of-web.com/php/dataexport/

ការរៀបចំទិន្នន័យ

$data = array(array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25), array("firstname" => "Amanda", "lastname" => " Miller", "អាយុ" => 18), array("firstname" => "James", "lastname" => "Brown", "age" => 31), array("firstname" => "Patricia", "lastname" => "Williams", "age" => 7), array("firstname" => "Michael", "lastname" => "Davis", "age" => 43), array("ឈ្មោះដំបូង" => "Sarah", "នាមត្រកូល" => "Miller", "អាយុ" => 24), array("firstname" => "Patrick", "lastname" => "Miller", "age" => 27) );

ជំហាន​ដំបូង​គឺ​ត្រូវ​បញ្ចេញ​ទិន្នន័យ​ក្នុង​ទម្រង់​ដែល​កំណត់​ដោយ​ផ្ទាំង (CSV ក៏​អាច​ត្រូវ​បាន​ប្រើ​ដែរ ប៉ុន្តែ​មាន​ភាព​ស្មុគស្មាញ​បន្តិច)។ ដើម្បីធ្វើដូចនេះយើងប្រើកូដខាងក្រោម:

យើងកំណត់ប្រភេទមាតិកាទៅជាអត្ថបទ/ធម្មតា ដើម្បីឱ្យលទ្ធផលអាចមើលបានកាន់តែងាយស្រួលនៅក្នុងកម្មវិធីរុករក។ បើមិនដូច្នេះទេ ដោយសារមិនមានការធ្វើទ្រង់ទ្រាយ HTML លទ្ធផលនឹងបង្ហាញជាបន្ទាត់តែមួយនៃអត្ថបទ។

ជួរទីមួយនៃលទ្ធផលនឹងជាចំណងជើងជួរឈរ (ក្នុងករណីនេះឈ្មោះវាលត្រូវបានប្រើ) ។ តម្លៃត្រូវបានបំបែកដោយផ្ទាំង \t និងបន្ទាត់ដែលមានការបំបែកបន្ទាត់ \n ។ លទ្ធផលគួរតែមើលទៅដូចនេះ៖

នាមត្រកូល អាយុ Mary Johnson 25 Amanda Miller 18 James Brown 31 Patricia Williams 7 Michael Davis 43 Sarah Miller 24 Patrick Miller 27

មានចំណុចខ្សោយនៅក្នុងកូដនេះ ដែលប្រហែលជាមិនច្បាស់ភ្លាមៗទេ។ ចុះយ៉ាងណាវិញ ប្រសិនបើវាលមួយដែលត្រូវការលទ្ធផលមានតួអក្សរផ្ទាំងមួយ ឬច្រើនរួចហើយ ឬកាន់តែអាក្រក់ជាងនេះទៅទៀត បន្ទាត់ថ្មី? វានឹងធ្វើឱ្យដំណើរការទាំងមូលចាប់តាំងពីយើងពឹងផ្អែកលើនិមិត្តសញ្ញាទាំងនេះដើម្បីចង្អុលបង្ហាញជួរឈរ និងការបំបែកបន្ទាត់។

ដំណោះស្រាយគឺ "គេច" តួអក្សរផ្ទាំង។ ក្នុងករណីនេះ យើងនឹងជំនួសផ្ទាំងដោយព្យញ្ជនៈ \t និងការបំបែកបន្ទាត់ដោយព្យញ្ជនៈ \n ដូច្នេះពួកវាមិនប៉ះពាល់ដល់ការធ្វើទ្រង់ទ្រាយទេ៖

ឥឡូវនេះ មុនពេលបន្ទាត់នីមួយៗត្រូវបានបន្ទរ តួអក្សរផ្ទាំងណាមួយត្រូវបានជំនួសដោយ "\ t" ដើម្បីកុំឱ្យជួរឈររបស់យើងខូច។ ដូចគ្នានេះផងដែរ ការបំបែកបន្ទាត់ណាមួយនៅក្នុងទិន្នន័យត្រូវបានជំនួសដោយ "\n" ។

.
វិធីសាស្រ្តដែលបានបង្ហាញនៅក្នុងកំណត់ចំណាំនោះពិតជាសាមញ្ញណាស់ ប៉ុន្តែប្រហែលជាមិនតែងតែងាយស្រួលនោះទេ។
មានវិធីជាច្រើនទៀតដើម្បីផ្ទេរទិន្នន័យតារាងពី PHP ទៅ Excel ខ្ញុំនឹងរៀបរាប់អំពីវិធីមួយដែលហាក់ដូចជាខ្ញុំសាមញ្ញបំផុត និងមានមុខងារ។ វាគួរតែត្រូវបានកត់សម្គាល់ជាពិសេសថាខ្ញុំមិននិយាយអំពីការបង្កើតឯកសារ xls ទេ ប៉ុន្តែគ្រាន់តែស្នើឱ្យអ្នកប្រើប្រាស់បើកទិន្នន័យដែលទទួលបានដោយប្រើ Excel ដូច្នេះអ្នកប្រើប្រាស់ដែលមិនមានបទពិសោធន៍ក្នុងការសរសេរកម្មវិធីនឹងមិនកត់សម្គាល់ការក្លែងបន្លំនោះទេ។

ដូច្នេះ រឿងដំបូងដែលអ្នកត្រូវធ្វើគឺដាក់នៅលើទំព័ររបស់យើងនូវតំណភ្ជាប់ទៅកាន់ស្គ្រីបដែលបង្កើតបឋមកថាខាងក្រោម៖
បឋមកថា ("Pragma: សាធារណៈ");
បឋមកថា ("ផុតកំណត់៖ ០");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
បឋមកថា ("ការគ្រប់គ្រងឃ្លាំងសម្ងាត់៖ ឯកជន", មិនពិត);
បឋមកថា ("ប្រភេទមាតិកា៖ កម្មវិធី/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()). "\";");
បឋមកថា ("មាតិកា-ផ្ទេរ-អ៊ិនកូដ៖ គោលពីរ");
header("Content-Length:" . $object->getFileSize());

$object គឺជាវត្ថុរាងស្វ៊ែរនៅក្នុងកន្លែងទំនេរ ដែលអ្នកអានម្នាក់ៗអាចអនុវត្តតាមដែលគាត់ចូលចិត្ត។ គោលបំណងនៃ getFileName() និង getFileSize() getters គឺច្បាស់លាស់ពីឈ្មោះរបស់ពួកគេ។ វាមានតម្លៃក្នុងការរំលេចនូវភាពមិនច្បាស់លាស់មួយនៅទីនេះ (អរគុណសម្រាប់ការរំលឹកខ្ញុំអំពីរឿងនេះ) - getFileName() ពិតណាស់អាចត្រឡប់ឈ្មោះឯកសារណាមួយ ប៉ុន្តែប្រសិនបើអ្នកចង់ឱ្យកម្មវិធីរុករកផ្តល់ការបើកមាតិកាដែលបានទទួលនៅក្នុង Excel នោះផ្នែកបន្ថែមឯកសារគួរតែ ក្លាយជា xls ។
ខ្ញុំមិនទាន់បាននិយាយអ្វីថ្មីនៅឡើយទេ អ្វីៗទាំងអស់នេះត្រូវបានបង្កើតនៅចំពោះមុខខ្ញុំ ទោះបីជាយ៉ាងណាក៏ដោយ ដូចអ្វីដែលនឹងត្រូវបានពិពណ៌នាខាងក្រោម។
ដូចដែលត្រូវបានកត់សម្គាល់ត្រឹមត្រូវនៅក្នុងមតិយោបល់ទៅអត្ថបទ Excel ដំណើរការលឿនជាងមុនជាមួយ XML ។ ប៉ុន្តែអត្ថប្រយោជន៍ដ៏សំខាន់បំផុត ប្រហែលជាមិនមែនជាល្បឿនទេ ប៉ុន្តែសមត្ថភាពកាន់តែទូលំទូលាយ។ ខ្ញុំនឹងមិនចូលជ្រៅទៅក្នុងស្មៅទេ ប៉ុន្តែគ្រាន់តែនឹងផ្តល់ឧទាហរណ៍សាមញ្ញមួយ និងតំណភ្ជាប់ទៅកាន់ការពិពណ៌នាលម្អិតនៃស្លាកទាំងអស់។

ដូច្នេះបន្ទាប់ពីបឋមកថាត្រូវបានបង្កើតយើងត្រូវផ្តល់ទិន្នន័យពិតប្រាកដដល់អ្នកប្រើប្រាស់។ ជាធម្មតាខ្ញុំរុំការបង្កើតតារាងតាមវិធីដាច់ដោយឡែកមួយ៖
បន្ទរ $object->getContent();

ហើយខ្ញុំបង្កើតតារាងដោយប្រើ Smarty៖

(foreach from=$data.header item=caption) ($caption.columnName)(/foreach)(foreach from=$data.content item=row) (foreach ពី=$row item=col) ($col)(/foreach)(/foreach)

ដូចដែលអ្នកអាចមើលឃើញពីកូដ អារេ $data ត្រូវបានបញ្ជូនទៅពុម្ពដែលមានអារេពីរ - បន្ទាត់ចំណងជើងតារាង និងទិន្នន័យខ្លួនឯង។
គួរកត់សម្គាល់ថាការប្រើម៉ាស៊ីនគំរូដើម្បីបង្កើត XML គឺមានតម្លៃថ្លៃខ្លះហើយ XML អាចទទួលបានតាមវិធីជាច្រើនទៀត។ ក្នុងករណីពិសេសរបស់ខ្ញុំ ជំនាន់ XML គឺគ្រាន់តែជាប្រាក់រង្វាន់តូចមួយនៅក្នុងគម្រោងធំ ដែលម៉ាស៊ីនគំរូមិនអាចខ្វះបាន។

ជាឧទាហរណ៍ ខ្ញុំបានផ្ដល់តារាងសាមញ្ញមួយ ប្រសិនបើចង់បាន អ្នកអាចរៀបចំគុណលក្ខណៈមួយចំនួនធំជាងនេះ។ នេះពិតជាល្អណាស់ដែលពិចារណាថាគ្មានបណ្ណាល័យភាគីទីបីត្រូវបានទាមទារសម្រាប់ការអនុវត្តនោះទេ។
វិធីសាស្ត្រដែលបានពិពណ៌នាបានដំណើរការលើគម្រោងមួយអស់រយៈពេលជាច្រើនឆ្នាំ ហើយមិនមានអ្នកប្រើប្រាស់ម្នាក់បានសង្ស័យថាទិន្នន័យដែលគាត់បានបើកមិនមែនជាឯកសារ MS Office ទេ។

អ្នកអាចអានបន្ថែមអំពីរចនាសម្ព័ន្ធ XML ដែលប្រើក្នុង MS Excel ក្នុង

សម្រាប់មនុស្សជាច្រើននៅពេលធ្វើការជាមួយ PHP ភ្ជាប់ជាមួយ MySQLមានតម្រូវការដូចជាការនាំចេញទិន្នន័យពីមូលដ្ឋានទិន្នន័យទៅជាទ្រង់ទ្រាយ xls ដូច្នេះអ្នកដែលត្រូវការទិន្នន័យនេះដំណើរការវានៅក្នុង Excel ឬវាងាយស្រួលសម្រាប់អ្នកប្រើប្រាស់ក្នុងការមើលទិន្នន័យនេះ។ ថ្មីៗនេះខ្ញុំមានតម្រូវការបែបនេះ ហើយថ្ងៃនេះខ្ញុំនឹងប្រាប់អ្នកពីរបៀបដែលបញ្ហានេះអាចត្រូវបានអនុវត្ត។

ខ្ញុំនឹងនិយាយភ្លាមៗថាវិធីសាស្ត្រនេះគឺសាមញ្ញណាស់ ប៉ុន្តែទិន្នន័យត្រូវបានផ្ទុកឡើងជាធម្មតា។

ដើម្បីចាប់ផ្តើមខ្ញុំនឹងផ្តល់ឧទាហរណ៍នៃឯកសារ xls ចុងក្រោយនៅក្នុង Excel ការបង្ហោះនឹងមើលទៅដូចនេះ៖

ម្យ៉ាងវិញទៀត គ្មានរូបភាព ឬរចនាប័ទ្មណាមួយនឹងត្រូវបានបង្ហោះទេ មានតែចំណងជើងជួរឈរ និងទិន្នន័យខ្លួនឯងប៉ុណ្ណោះ។

មុនពេលដែលខ្ញុំមករកជម្រើសសម្រាប់ការបង្ហោះនេះ ខ្ញុំបានព្យាយាមបង្ហោះជាទម្រង់ csv ប៉ុន្តែវាប្រែជាច្របូកច្របល់បន្តិច បន្ទាប់មកខ្ញុំបានព្យាយាមគូរតារាង ហើយរក្សាទុកវាជាមួយផ្នែកបន្ថែម xls វាក៏ប្រែទៅជាមិនសមហេតុសមផលមួយចំនួនផងដែរ។ វិធីសាស្រ្តដែលខ្ញុំនឹងពណ៌នាឥឡូវនេះសមនឹងខ្ញុំទាំងស្រុង ហើយឥឡូវនេះខ្ញុំនឹងចែករំលែកវាជាមួយអ្នក។

ដើម្បីចាប់ផ្តើមខ្ញុំនឹងផ្តល់កូដទាំងអស់ដែលខ្ញុំបានបញ្ចេញមតិតាមដែលអាចធ្វើបានអ្នកអាចជ្រើសរើសវាហើយរក្សាទុកវាជាមួយផ្នែកបន្ថែម php ហើយសាកល្បងវាគ្រាន់តែកុំភ្លេចបញ្ជាក់ការកំណត់សម្រាប់ភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ។

នាំចេញទិន្នន័យពី MySQL ទៅ Excel ក្នុង PHP

ហើយដើម្បីឱ្យអ្នកយល់ពីទិន្នន័យដែលខ្ញុំកំពុងផ្ទុកឡើង ខ្ញុំនឹងផ្តល់ឧទាហរណ៍នៃតារាងសាមញ្ញមួយនៅក្នុងមូលដ្ឋានទិន្នន័យ ( ខ្ញុំមានការធ្វើតេស្តឈ្មោះរបស់វា។):

តារាងសាកល្បង៖

លេខសម្គាល់ ឈ្មោះដើម ឈ្មោះ
1 អ៊ីវ៉ាណូវ អ៊ីវ៉ាន
2 Petrov ពេត្រុស
2 Petrov ២ ពេត្រុស ២
xlsData = pack("ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0); ) // ប្រសិនបើមុខងារលេខ RecNumber($row, $col, $value)( $this->xlsData .= pack("ssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData . = pack("d", $value); (" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len); $this->xlsData .= $value ) // បញ្ចូលអនុគមន៍លេខ InsertNumber($value)( ប្រសិនបើ ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $ តម្លៃ); $this->countCol ++; > countRow ++; ) $this->RecText($this->countRow, $this->countCol, $value); countCol = 0 ; $this->countRow++ ត្រឡប់ ) // មុខងារបញ្ចប់ទិន្នន័យ EndData() ( $this->xlsData .= pack("ss", 0x0A, 0x00); ត្រឡប់មកវិញ; ) // រក្សាទុកមុខងារឯកសារ SaveFile($fileName)( $this->fileName = $fileName; $this->SendFile(); ) // ផ្ញើមុខងារឯកសារ SendFile())($this->EndData(); header (" Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT"); header ("Cache-Control: no-store, no-cache, must-revalidate"); បឋមកថា ("Pragma: no-cache"); បឋមកថា ("ប្រភេទមាតិកា៖ កម្មវិធី/x-msexcel"); ->xlsData ) ) ) ប្រសិនបើ(isset($_GET["id"])) (//filter the data $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id")"],ENT_QUOTES)))) ; $filename = "File_with_id_".$id; // កំណត់ឈ្មោះឯកសារ $excel = new ExportToExcel(); // សំណួរទៅកាន់មូលដ្ឋានទិន្នន័យ $rez= mysql_query($sql); $excel->InsertText("Identifier"); $excel->InsertText("Last Name"); excel->GoNewLine(); row=mysql_fetch_assoc($rez))($excel->InsertNumber($row["id"]); $excel->InsertText($row["firstname"]); $excel->InsertText($row["name"]); $excel->GoNewLine(); ) $excel->SaveFile($filename); ) ?>

គំនិតទាំងមូលនៅទីនេះគឺមុខងារ កញ្ចប់()ដែលខ្ចប់ទិន្នន័យទៅក្នុងខ្សែអក្សរគោលពីរ ហើយយើងបំពេញខ្សែអក្សរនេះជាបន្តបន្ទាប់ជាមួយនឹងទិន្នន័យដែលយើងទាញយកពីមូលដ្ឋានទិន្នន័យ MySql ដោយប្រើមុខងារធម្មតា។ mysql_query().

ដើម្បីពិនិត្យមើលមុខងារនៃកូដនេះ ដោយគិតគូរពីការពិតដែលថាអ្នកបានកំណត់រចនាសម្ព័ន្ធការតភ្ជាប់ទៅមូលដ្ឋានទិន្នន័យ និងបង្កើតតារាងស្រដៀងគ្នា អ្នកអាចផ្ញើសំណើដូចខាងក្រោមៈ

http://your_site/file_name. php?id=2

ហើយ​អ្នក​គួរ​ដក​ពីរ​បន្ទាត់​ដែល​មាន​លេខ​សម្គាល់​ស្មើ​នឹង 2។

ហើយឥឡូវនេះនរណាម្នាក់ដែលអ្នកអនុញ្ញាតឱ្យផ្ទុកឡើងទិន្នន័យអាចនាំចេញវាបានយ៉ាងងាយស្រួលទៅកាន់កុំព្យូទ័រមូលដ្ឋានរបស់ពួកគេតាមរយៈចំណុចប្រទាក់បណ្ដាញ។ វិធីសាស្រ្តនេះគឺមានភាពងាយស្រួលសម្រាប់អ្នកប្រើប្រាស់សាជីវកម្ម ប្រសិនបើអ្នកកំពុងបង្កើតកម្មវិធីសម្រាប់ស្ថាប័នរបស់អ្នក និងសម្រាប់អ្នកប្រើប្រាស់គេហទំព័ររបស់អ្នកនៅលើអ៊ីនធឺណិត។ ខ្ញុំសង្ឃឹមថាវិធីសាស្ត្រនេះបានជួយអ្នក។ សំណាងល្អ!

.
វិធីសាស្រ្តដែលបានបង្ហាញនៅក្នុងកំណត់ចំណាំនោះពិតជាសាមញ្ញណាស់ ប៉ុន្តែប្រហែលជាមិនតែងតែងាយស្រួលនោះទេ។
មានវិធីជាច្រើនទៀតដើម្បីផ្ទេរទិន្នន័យតារាងពី PHP ទៅ Excel ខ្ញុំនឹងរៀបរាប់អំពីវិធីមួយដែលហាក់ដូចជាខ្ញុំសាមញ្ញបំផុត និងមានមុខងារ។ វាគួរតែត្រូវបានកត់សម្គាល់ជាពិសេសថាខ្ញុំមិននិយាយអំពីការបង្កើតឯកសារ xls ទេ ប៉ុន្តែគ្រាន់តែស្នើឱ្យអ្នកប្រើប្រាស់បើកទិន្នន័យដែលទទួលបានដោយប្រើ Excel ដូច្នេះអ្នកប្រើប្រាស់ដែលមិនមានបទពិសោធន៍ក្នុងការសរសេរកម្មវិធីនឹងមិនកត់សម្គាល់ការក្លែងបន្លំនោះទេ។

ដូច្នេះ រឿងដំបូងដែលអ្នកត្រូវធ្វើគឺដាក់នៅលើទំព័ររបស់យើងនូវតំណភ្ជាប់ទៅកាន់ស្គ្រីបដែលបង្កើតបឋមកថាខាងក្រោម៖
បឋមកថា ("Pragma: សាធារណៈ");
បឋមកថា ("ផុតកំណត់៖ ០");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
បឋមកថា ("ការគ្រប់គ្រងឃ្លាំងសម្ងាត់៖ ឯកជន", មិនពិត);
បឋមកថា ("ប្រភេទមាតិកា៖ កម្មវិធី/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv("UTF-8", "CP1251", $object->getFileName()). "\";");
បឋមកថា ("មាតិកា-ផ្ទេរ-អ៊ិនកូដ៖ គោលពីរ");
header("Content-Length:" . $object->getFileSize());

$object គឺជាវត្ថុរាងស្វ៊ែរនៅក្នុងកន្លែងទំនេរ ដែលអ្នកអានម្នាក់ៗអាចអនុវត្តតាមដែលគាត់ចូលចិត្ត។ គោលបំណងនៃ getFileName() និង getFileSize() getters គឺច្បាស់លាស់ពីឈ្មោះរបស់ពួកគេ។ វាមានតម្លៃក្នុងការរំលេចនូវភាពមិនច្បាស់លាស់មួយនៅទីនេះ (សូមអរគុណដល់ savostin សម្រាប់ការរំលឹកខ្ញុំអំពីរឿងនេះ) - getFileName() ពិតណាស់អាចត្រឡប់ឈ្មោះឯកសារណាមួយ ប៉ុន្តែប្រសិនបើអ្នកចង់ឱ្យកម្មវិធីរុករកផ្តល់ការបើកមាតិកាដែលបានទទួលនៅក្នុង Excel បន្ទាប់មកឯកសារ ផ្នែកបន្ថែមគួរតែជា xls ។
ខ្ញុំមិនទាន់បាននិយាយអ្វីថ្មីនៅឡើយទេ អ្វីៗទាំងអស់នេះត្រូវបានបង្កើតនៅចំពោះមុខខ្ញុំ ទោះបីជាយ៉ាងណាក៏ដោយ ដូចអ្វីដែលនឹងត្រូវបានពិពណ៌នាខាងក្រោម។
ដូចដែលត្រូវបានកត់សម្គាល់ត្រឹមត្រូវនៅក្នុងមតិយោបល់ទៅប្រកាសអំពីជំនាន់ xls នៅក្នុង PHP Excel ដំណើរការលឿនជាងមុនជាមួយ XML ។ ប៉ុន្តែអត្ថប្រយោជន៍ដ៏សំខាន់បំផុត ប្រហែលជាមិនមែនល្បឿនទេ ប៉ុន្តែសមត្ថភាពកាន់តែទូលំទូលាយ។ ខ្ញុំនឹងមិនចូលជ្រៅទៅក្នុងស្មៅទេ ប៉ុន្តែគ្រាន់តែនឹងផ្តល់ឧទាហរណ៍សាមញ្ញមួយ និងតំណភ្ជាប់ទៅកាន់ការពិពណ៌នាលម្អិតនៃស្លាកទាំងអស់។

ដូច្នេះបន្ទាប់ពីបឋមកថាត្រូវបានបង្កើតយើងត្រូវផ្តល់ទិន្នន័យពិតប្រាកដដល់អ្នកប្រើប្រាស់។ ជាធម្មតាខ្ញុំរុំការបង្កើតតារាងតាមវិធីដាច់ដោយឡែកមួយ៖
បន្ទរ $object->getContent();

ហើយខ្ញុំបង្កើតតារាងដោយប្រើ Smarty៖

(foreach from=$data.header item=caption) ($caption.columnName)(/foreach)(foreach from=$data.content item=row) (foreach ពី=$row item=col) ($col)(/foreach)(/foreach)

ដូចដែលអ្នកអាចមើលឃើញពីកូដ អារេ $data ត្រូវបានបញ្ជូនទៅពុម្ពដែលមានអារេពីរ - បន្ទាត់ចំណងជើងតារាង និងទិន្នន័យខ្លួនឯង។
គួរកត់សម្គាល់ថាការប្រើម៉ាស៊ីនគំរូដើម្បីបង្កើត XML គឺមានតម្លៃថ្លៃខ្លះហើយ XML អាចទទួលបានតាមវិធីជាច្រើនទៀត។ ក្នុងករណីពិសេសរបស់ខ្ញុំ ជំនាន់ XML គឺគ្រាន់តែជាប្រាក់រង្វាន់តូចមួយនៅក្នុងគម្រោងធំ ដែលម៉ាស៊ីនគំរូមិនអាចខ្វះបាន។

ជាឧទាហរណ៍ ខ្ញុំបានផ្ដល់តារាងសាមញ្ញមួយ ប្រសិនបើចង់បាន អ្នកអាចរៀបចំគុណលក្ខណៈមួយចំនួនធំជាងនេះ។ នេះពិតជាល្អណាស់ដែលពិចារណាថាគ្មានបណ្ណាល័យភាគីទីបីត្រូវបានទាមទារសម្រាប់ការអនុវត្តនោះទេ។
វិធីសាស្ត្រដែលបានពិពណ៌នាបានដំណើរការលើគម្រោងមួយអស់រយៈពេលជាច្រើនឆ្នាំ ហើយមិនមានអ្នកប្រើប្រាស់ម្នាក់បានសង្ស័យថាទិន្នន័យដែលគាត់បានបើកមិនមែនជាឯកសារ MS Office ទេ។

អ្នកអាចអានបន្ថែមអំពីរចនាសម្ព័ន្ធ XML ដែលប្រើក្នុង MS Excel ក្នុង