Menu

ডাটাবেজ থেকে ডাটা এক্সেল এ এক্সপোর্ট

2 min read Featured February 25, 2020 at 5:41pm on PHP

আজকে অফিসে একটা মজার কাজ করলাম, শুরুতে কত চিন্তায় আসছিলো মনের মধ্যে কি হবে না হবে। যাইহোক কাজ টা ছিলো, পি এইচ পি দিয়ে ডাটাবেজ থেকে ডাটা এক্সেল এ এক্সপোর্ট করতে হবে। আসলে নরমাল এক্সপোর্ট হলে কোন সমস্যায় হতোনা, এখানে কয়েকটা ব্যাপার ছিলো যেমন, জেকুয়েরি ডাটাটেবিল এ একটা বাটন যোগ করতে হবে তারপর সেই বাটন দিয়ে পি এছ পি ফাংশন এর কাজ করতে হবে। যে ফাংশন আমার কাঙ্খিত ডাটা এনে আমাক একটা অ্যারে বানায় দিবে। 

 

অ্যারে টা বানাতে পারলেই কোডিগনাইটার এর 'এক্সেল' লাইব্রেরী তার কাজ করবে। তো আমি কিভাবে কাজ করলামঃ 

 

  • প্রথমে জেকুয়েরি ডাটাটেবিল এ একটা বাটন যোগ করলাম যাতে ক্লিক করলে একটা ইউ আর এল এ হিট করে।  
buttons: [
    {
text: 'Export In Excel',
        className: 'btn btn-purple mr btn-xs',
        action: function ( e, dt, button, config ) {
            window.location = 'base_url('admin/QualityAssurance/getAllStaffFeedForExcel') ?>';
        }

    },
],
  • সেই একটা ইউ আর এল দিয়ে কন্ট্রোলার যেয়ে ব্ললাম  বাবা তুমি আগে 'এক্সেল' এর লাইব্রেরী লোড করেছি এটা দেখো। সে দেখে চুপ করে রইলো। 
        $this->load->library('Excel');
  • তারপর আমি এক্সেল এর ওয়ার্কশীট  আক্টিভেট করে দিলাম।
        $this->excel->setActiveSheetIndex(0);
  • এরপর আমি আমার 'এক্সেল শীটের' একটা নাম দিলাম। 
        $this->excel->getActiveSheet()->setTitle('Staff Feedback');
  • এরপর আক্টিভশীটের কলাম ডাইমেনশন করে নিলাম যত গুলা আমার লাগবেঃ
        $this->excel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
        $this->excel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  • এরপর আমার কলামের হেডার গুলাতে একটু  সিএসএস দিলাম 
        $this->excel->getActiveSheet()->getStyle("A1:U1")->applyFromArray(array("font" => array("bold" => true)));
  • ও হ্যা কলামের হেডাররের নাম তো দেওা হলোনাঃ
        $this->excel->setActiveSheetIndex(0)->setCellValue('A1', 'Date');
        $this->excel->setActiveSheetIndex(0)->setCellValue('B1', 'Admin');
  • নাম তো দিলাম এবার ডাটা এনে বসাতে হবেঃ

                $data = $this->QualityAssurancemodel->getAllStaffFeedForExcel();

  • ডাটা তো পেলাম তাহলে এখন লুপ চালিয়ে বসিয়ে দিই। 

              $n = 2;

               if(!empty($data)){ 

               foreach ($mainData as $row){

          $this->excel->getActiveSheet()->setCellValue('A'.$n, $row['date']);
          $this->excel->getActiveSheet()->setCellValue('B'.$n, $row['adminName']);
        $n++;
          }
        }
  • তারপর এক্সেল ফাইলের একটা নাম দিই যে নামে ডাউনলোড হবে। 

               $filename = 'Staff Feedback.xls'; //save our workbook as this file name

  •  এরপর আর একটু মজার কাজ করতে হবে যেমন, টাইপ টা বলে দিতে হবে, ব্রাউজার কে ফাইলের নাম টা বলে দিতে হবে এবং একই সাথে ক্যাশ টাও ক্লিয়ার করে দিই না হলে একই ফাইল বার বার ডাউনলোড হবে। 

               header('Content-Type: application/vnd.ms-excel'); //mime type

               header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name

               header('Cache-Control: max-age=0'); //no cache

  •  এরপর বাকি কাজটা করে ফেলা যাকঃ 
           //save it to Excel5 format (excel 2003 .XLS file), change this to 'Excel2007' (and adjust the filename extension, also the header mime type)
          //if you want to save it as .XLSX Excel 2007 format
          $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
          //force user to download the Excel file without writing it to server's HD
          $objWriter->save('php://output');