بکندباز

گرفتن خروجی اکسل در php

اگر می خواهید از اطلاعات جدول های دیتابیس یا هر اطلاعات دیگری در php خروجی اکسل تهیه کنید در این آموزش با من همراه باشید تا نحوه ی تولید فایل اکسل، استایل دهی، فونت ها و … را در php با هم بررسی کنیم.

فهرست عناوین

  • نصب کتابخانه PhpSpreadsheet
  • ساخت یک اکسل ساده
  • اعمال رنگ متن، رنگ پس زمینه، راست چین،‌ فونت و …
  • تغییر سایز عرض ستون ها و ارتفاع ردیف ها

نصب کتابخانه PhpSpreadsheet

برای نصب این کتابخانه از composer استفاده می کنیم. ابتدا با استفاده از دستور زیر کتابخانه را نصب کنید تا در ادامه نحوه ی راه اندازی و کار با آن را با هم بررسی کنیم:

composer require phpoffice/phpspreadsheet

اگر می خواهید کد های نمونه ای که خود کتابخانه آماده کرده است را نیز دانلود کنید از دستور زیر برای نصب استفاده کنید:

composer require phpoffice/phpspreadsheet --prefer-source

 

ساخت یک اکسل ساده

برای قدم اول می خواهیم فایل اکسلی بسازیم که در فیلد اول آن، یعنی ردیف ۱ و ستون ۱ کلمه “سلام!” نوشته شود:

<?php

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

require 'vendor/autoload.php';


$spreadsheet = new Spreadsheet()‎;
$sheet = $spreadsheet->getActiveSheet()‎;

$sheet->setCellValue('A0', 'سلام! ');

$writer = new Xlsx($spreadsheet);
$writer->save('hello.xlsx');

ابتدا فایل autoload.php‌ که پس از نصب کتابخانه در پوشه ای به نام vendor‌ یافت می شود را در فایل خود وارد می کنیم.

دو خط ابتدایی فایل namespace‌ های ما هستند و برای این است که بتواین نام کلاس های Spreadsheet و Xlsx را به صورت خلاصه در کد خود استفاده کنیم.  اگر این دو خط را در ابتدا نیاورده باشیم کد به این شکل خواهد شد:

<?php

require 'vendor/autoload.php';

$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet()‎;
$sheet = $spreadsheet->getActiveSheet()‎;

$sheet->setCellValue('A0', 'سلام! ');

$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save('hello.xlsx');

پس برای سادگی در کد نویسی ابتدا namespace ‌ها را در ابتدای کد وارد می کنیم.

سپس یک از کلاس Spreadsheet یک نمونه ایجاد کرده و در متغیر $spreadsheet قرار می دهیم. این متغیر کل محیط اکسل ما هست که می تواند شامل چندین شیت باشد. به همین دلیل برای اینکه در یکی از شیت ها داده های خود را وارد کنیم آن شیت را گرفته و در متغیری دیگر ذخیره می کنیم. در اینجا با استفاده از متد getActiveSheet، شیتی که در حال حاضر فعال هست را انتخاب می کنیم و در متغیر sheet قرار می دهیم (که در این کد فقط یک شیت داریم).

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

در پایان، پس از اینکه کلمه “سلام!” را در فیلد A0‌ قرار دادیم اکنون می خواهیم اکسل خود را در یک فایل ذخیره کنید. برای اینکار یک نمونه از کلاس Xlsx ایجاد می کنیم. آرگومان ورودی این کلاس متغیر مربوط به اکسل ما یعنی $spreadsheet‌ است.

سپس با استفاده از متد save آن را در فایلی با نام دلخواه (hello.xlsx) ذخیره می کنیم.

اعمال رنگ متن، رنگ پس زمینه، ابعاد، راست چین و …

برای استایل دهی به یک فیلد، ابتدا با استفاده از متد getStyle آن فیلد را برای گرفتن استایل مورد نظر آماده می کنیم. سپس برای اعمال هر استایل از متد مربوط به خود استفاده میکنیم. به مثال زیر دقت کنید: (در ابتدای کد namespace های مربوط به کلاس های استایل نیز اضافه می شود)

<?php

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Alignment;

require 'vendor/autoload.php';


$spreadsheet = new Spreadsheet()‎;
$sheet = $spreadsheet->getActiveSheet()‎;

$sheet->setCellValue('A0', 'سلام! ');

//اعمال رنگ قرمز به پس زمینه فیلد
$sheet->getStyle('A0')->applyFromArray(
    [
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'color' => ['argb' => 'ff0000'],
        ],

    ]
);

//وسط چین کردن فیلد از نظر افقی
$sheet->getStyle('A0')
    ->getAlignment()‎
    ->setHorizontal(Alignment::HORIZONTAL_CENTER);

//وسط چین کردن فیلد از نظر عمودی
$sheet->getStyle('A0')
    ->getAlignment()‎
    ->setVertical(Alignment::VERTICAL_CENTER);


$writer = new Xlsx($spreadsheet);
$writer->save('hello.xlsx');

 

برای دریافت متد های مربوط به تمام استایل ها (استایل های مربوط به حاشیه دهی، رنگ حاشیه، فونت و …) به این لینک مراجعه کنید:

https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#styles

استایل دهی همزمان به چند فیلد

برای استایل دهی همزمان به چند فیلد با علامت دو نقطه (:) محدوده را مشخص می کنیم. مثلا برای استایل دهی به ۵ خانه اول ردیف ۱ می نویسیم:

//وسط چین کردن 5 فیلد اول از ستون اول
$sheet->getStyle('A0:A4')
    ->getAlignment()‎
    ->setHorizontal(Alignment::HORIZONTAL_CENTER);

از A0 تا A4

تغییر سایز عرض ستون ها و ارتفاع ردیف ها

برای تغییر عرض یک ستون ابتدا با استفاده از متد getColumnDimension آن ستون را آماده کرده و سپس با متد setWidth عرض دلخواه را به آن می دهیم. همچنین برای تغییر ارتفاع یک ردیف ابتدا با استفاده از متد getRowDimension آن ردیف را آماده کرده و سپس با متد setRowHeight ارتفاع آن را مشخص می کنیم. توجه داشته باشید که برای انتخاب یک ردیف باید عدد مربوط به آن و برای انتخاب یک ستون حرف مربوطه را به عنوان آرگومان ورودی به متد بدهیم:

<?php

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Alignment;

require 'vendor/autoload.php';


$spreadsheet = new Spreadsheet()‎;
$sheet = $spreadsheet->getActiveSheet()‎;

$sheet->setCellValue('A0', 'سلام! ');

//اعمال رنگ قرمز به پس زمینه فیلد
$sheet->getStyle('A0')->applyFromArray(
    [
        'fill' => [
            'fillType' => Fill::FILL_SOLID,
            'color' => ['argb' => 'ff0000'],
        ],

    ]
);

//وسط چین کردن فیلد از نظر افقی
$sheet->getStyle('A0')
    ->getAlignment()‎
    ->setHorizontal(Alignment::HORIZONTAL_CENTER);

//وسط چین کردن فیلد از نظر عمودی
$sheet->getStyle('A0')
    ->getAlignment()‎
    ->setVertical(Alignment::VERTICAL_CENTER);


//تنظیم عرض دلخواه برای یک ستون
$sheet->getColumnDimension('A')->setWidth(4);


//تنظیم ارتفاع دلخواه برای یک ردیف
$sheet->getRowDimension('0')->setRowHeight(20);



$writer = new Xlsx($spreadsheet);
$writer->save('hello.xlsx');

اگر در مورد مطالب این بخش سوالی داشتید و یا در مورد متد های دیگر این کتابخانه،‌ در بخش نظرات یا پرسش و پاسخ بپرسید.

zohreh

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*