در این قسمت نمونه برنامه ای برای صدور رکوردهای اطلاعاتی به فرمت اکسل و ذخیره کردن آنها در یک فایل اکسل با فرمت xlsx می پردازیم. قبلاً نمونه برنامه ای برای ورود اطلاعات از فرمت اکسل نوشتیم، برای تکمیل فراِند import/export فایل های اکسل ادامه مطلب را بخوانید.

مرحله ۱- تعریف آرایه حاوی رکوردها

ابتدا آرایه زیر را در نظر می گیریم که حاوی اطلاعات چند رکورد است:

<?PHP
$data = [
["firstname" => "Mary", "lastname" => "Johnson", "age" => 25],
["firstname" => "Amanda", "lastname" => "Miller", "age" => 18],
["firstname" => "James", "lastname" => "Brown", "age" => 31],
["firstname" => "Patricia", "lastname" => "Williams", "age" => 7],
["firstname" => "Michael", "lastname" => "Davis", "age" => 43],
["firstname" => "Sarah", "lastname" => "Miller", "age" => 24],
["firstname" => "Patrick", "lastname" => "Miller", "age" => 27]
];
?>

مرحله ۲- فیلتر کردن داده ها

با توجه به اینکه در اکسل از کاراکترهای خاص مثل : یا $ و … برای اهداف خاصی استفاده میشود باید داده ها را بررسی کرده و کاراکترهای خاص را به شکل مناسب اصلاح کنیم تا در نمایش داده ها در اکسل مشکلی پیش نیاید. برای این کار تابع زیر را استفاده می کنیم:

function filterData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}

مرحله ۳ – تعریف نوع خروجی برنامه

برای ایجاد خروجی برنامه و دانلود یک فایل با نام مورد نظر و پسوند xlsx ابتدا هدر را برای این نوع خروجی تنظیم می کنیم:


// file name for download
$fileName = "test" . date('Ymd') . ".xlsx";
// headers for download
header("Content-Disposition: attachment; filename=\"$fileName\"");
header("Content-Type: application/vnd.ms-excel");

مرحله ۴- پیمایش آرایه و چاپ اطلاعات در خروجی

ابتدا یک سطر برای عنوان جدول چاپ کرده و در ادامه هر کدام از رکوردها را در یک سطر جداگانه به خروجی می فرستیم. بین هر دو فیلد علامت TAB قرار داده شده است.


$flag = false;
foreach($data as $row) {
if(!$flag){
// display column names as first row
echo implode("\t", array_keys($row)) . "\n";
$flag = true;
}
// filter data
array_walk($row, 'filterData');
echo implode("\t", array_values($row)) . "\n";
}
exit;

  • تابع implode برای به هم چسباندن خانه های یک آرایه و قراردادن بین آنها یک جداکننده استفاده می شود.
  • تابع array_keys کلیدها(اندیس های ) آرایه را می دهد.
  • تابع array_walk تمام خانه های آرایه را پیمایش کرده و تابع مورد نظر را روی آنها اجرا می کند.

برنامه کامل صدور داده ها

برنامه کامل صدور داده ها به فرمت excel را در ادامه می بینید:

<?php
$data = array(
array("First Name" => "Natly", "Last Name" => "Jones", "Email" => "natly@gmail.com", "Message" => "Test message by Natly"),
array("First Name" => "Codex", "Last Name" => "World", "Email" => "info@codexworld.com", "Message" => "Test message by CodexWorld"),
array("First Name" => "John", "Last Name" => "Thomas", "Email" => "john@gmail.com", "Message" => "Test message by John"),
array("First Name" => "Michael", "Last Name" => "Vicktor", "Email" => "michael@gmail.com", "Message" => "Test message by Michael"),
array("First Name" => "Sarah", "Last Name" => "David", "Email" => "sarah@gmail.com", "Message" => "Test message by Sarah")
);
function filterData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
// file name for download
$fileName = " test" . date('Ymd') . ".xls";
// headers for download
header("Content-Disposition: attachment; filename=\"$fileName\"");
header("Content-Type: application/vnd.ms-excel");
$flag = false;
foreach($data as $row) {
if(!$flag) {
// display column names as first row
echo implode("\t", array_keys($row)) . "\n";
$flag = true;
}
// filter data
array_walk($row, 'filterData');
echo implode("\t", array_values($row)) . "\n";
}
exit;
?>

نمایش قابل چاپ