صدور داده ها به اکسل در پی اچ پی

در این قسمت نمونه برنامه ای برای صدور رکوردهای اطلاعاتی به فرمت اکسل و ذخیره کردن آنها در یک فایل اکسل با فرمت 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;
?>

برچسب ها

, ,

محصولات پیشنهادی


نظرات کاربران


نظرات برای مقالات فناوری و آموزشی, نمونه پروژه برنامه نویسی با php | ۴ نظر »

  1. Avatar برنامه نویس گفت:

    سلام
    مطلب خوبی هست ولی چرا فارسی ها رو به صورت نا مفهوم میذاره توی فایل؟؟
    بجای اینکه بنویسه سلام اینو تحویل من داده سلام
    از دیتابیس درست میخونه(وقتی vardump می گیرم همه چی رو درست نشون میده اما توی فایل اینطوری میشه!!)

  2. Avatar لیلا گفت:

    سلام
    من هم همین مشکل رو دارم. کاراکترهای فارسی رو درست نشون نمیده.
    لطفا راهنمایی کنید

  3. محمدی محمدی گفت:

    سلام
    فکر کنم اگر از بانک اطلاعاتی می خونید باید به نحوه کدگذاری حروف (collation) در بانک اطلاعاتی تون دقت کنید و مثلاً utf8 قرار بدین که برای باز شدن در اکسل مشکلات کمتری دارد.
    همچنین میتونید فایل رو با پسوند csv دانلود کنید و بعداً با ایمپورت فایل csv در محیط اکسل فرمت مناسبی برای داده ها انتخاب کنید.

  4. Avatar rezayi گفت:

    مشکل از دیتا بیس نیست ابتدا یک فایل خالی اکسل باز کنید سپس از منو گزینه data را انتخاب کنید و بعد باز از منو رو from text کلیک کنید و از انجا فایلی را که دانلود کرده اید انتخاب کنید یه پنجره باز میشه حتما دقت کنید که file origin رو utf8 قرار بدین بعد نکست رو بزنید مرحله بعد قسمت delimters گزینه semicolon را انتخاب کنید و مرحله بعد تمام فایل به صورت فارسی نشان داده میشود

کاربر عزیز، لطفاً دیدگاه ارزشمند خود را از طریق فرم زیر برای ما ارسال کنید:

درباره کدنویسان
آکادمی کدنویسان جهت کمک به دانشجویان رشته های کامپیوتر و فناوری اطلاعات و همه علاقمندان به طراحی و برنامه نویسی برای ویندوز، وب و موبایل ایجاد شده است.
بیشتر آموزش های سایت کدنویسان، بصورت رایگان ارائه شده است و بعضی بسته های آموزشی تصویری و نیز نرم افزارهای پیاده سازی شده در ازای پرداخت، قابل دانلود هستند.
هر گونه نظر، انتقاد یا پیشنهادی در مورد مطالب یا عملکرد کدنویسان دارید، حتما با ما در میان بگذارید.
نمادهای اعتماد ما


تماس با ما
  • شماره همراه : ۰۹۱۵۱۶۰۴۰۶۸
  • آی دی تلگرام : @mmoha94
  • پست الکترونیکی : mohammadi.sm@gmail.com
  • آدرس پستی : بیرجند، خیابان پیروزی، پیروزی ۹، پلاک ۲۸
کلیه حقوق متعلق به سایت کدنویسان است، انتشار و کپی برداری از مطالب این سایت غیرمجاز بوده و پیگرد قانونی دارد.