تبدیل دیتابیس یا جدول به فایل اکسل

11 بهمن 1400

تبدیل دیتابیس یا جدول به فایل اکسل

استفاده از جاوااسکریپت برای تبدیل جداول به فایل اکسل، در جای خود بسیار کاربردی است اما - برای من - مشکل جایی خودش را نشان می‌داد که حجم داده‌ها بالا بود؛ در نتیجه هنگام خروجی گرفتن اکسل، برنامه دچار خطا، کُندی یا نقص می‌شد.

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

<?php
include("xlsxwriter.class.php");
?>

مثال زیر ساده‌ترین شکل استفاده از این کلاس است. خروجی کار یک فایل اکسل با مقادیر 1، Ali و علی است:

<?php
include("xlsxwriter.class.php");

$xlsArr = array('1','Ali','علی');
$writer = new XLSXWriter();
$writer->writeSheetRow('Sheet1', $xlsArr);
$writer->writeToFile('report.xlsx');
?>
شرح برنامه

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

db.php
<?php
$host     	= "localhost";		//هاست
$user     	= "root";			//نام کاربری
$pass 	= "";				//رمز عبور
$db 	= "my_db";		//نام دیتابیس
$table 	= "my_tbl";		//نام جدول

$dsn	= "mysql:host=$host;dbname=$db;charset=utf8";
$options        = [
	PDO::ATTR_EMULATE_PREPARES   => false, 
	PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, 
	PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
];

try {	$pdoConn = new PDO($dsn, $user, $pass, $options); } 
catch (Exception $e) { exit("خطای اتصال"); }
?>
my_tbl.sql
CREATE TABLE `my_tbl` (
  `id` int(11) NOT NULL,
  `title` varchar(50) NOT NULL DEFAULT '',
  `amount` varchar(15) NOT NULL DEFAULT '0',
  `count` int(5) NOT NULL DEFAULT '0',
  `datetime` varchar(50) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='جدول من';

INSERT INTO `my_tbl` (`id`, `title`, `amount`, `count`, `datetime`) VALUES
(1, 'پیراهن', '200000', 10, '2022-01-01 12:00:00'),
(2, 'شلوار', '300000', 20, '2022-02-01 12:00:00'),
(3, 'جوراب', '20000', 15, '2022-03-01 12:00:00'),
(4, 'کلاه', '100000', 5, '2022-04-01 12:00:00'),
(5, 'کفش', '300000', 12, '2022-05-01 12:00:00');

ALTER TABLE `my_tbl` ADD PRIMARY KEY (`id`);
ALTER TABLE `my_tbl` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
index.php
<?php
header('Content-Type: text/html; charset=utf-8');
include("db.php");
include("xlsxwriter.class.php");

$tbl		= "<table>";
$tbl		.= "<thead>";
$tbl		.= "<tr>";
$tbl		.= "<th>ردیف</th>";
$tbl		.= "<th>عنوان</th>";
$tbl		.= "<th>مبلغ</th>";
$tbl		.= "<th>تعداد</th>";
$tbl		.= "<th>تاریخ</th>";
$tbl		.= "</tr>";
$tbl		.= "</thead>";
$tbl		.= "<tbody>"; 

$rowArr	= array();

$header 	= array(
 	'ردیف'=>'integer',
	'عنوان'=>'string',
 	'مبلغ'=>'price',
	'تعداد'=>'integer',
	'تاریخ'=>'YYYY-MM-DD HH:MM:SS'
);
$option1 = array(
	'font'=>'Tahoma',
	'font-size'=>10,
	'font-style'=>'bold',
	'fill'=>'#aaa',
	'halign'=>'center',
	'border'=>'left,right,top,bottom',
	'widths'=>[10,10,15,10,20]
);

$sql 	= "SELECT * FROM $table";
$stmt 	= $pdoConn->prepare($sql);
$stmt->execute();
$row 	= $stmt->fetchAll();  

for($i=0;$i<count($row);$i++)  {
	$id 		= $row[$i]['id'];
	$title 	= $row[$i]['title'];
	$amount = $row[$i]['amount'];
	$count 	= $row[$i]['count'];
	$date 	= $row[$i]['datetime'];

	$tbl .= "<tr>";
	$tbl .= "<td>".$id."</td>";
	$tbl .= "<td>".$title."</td>";
	$tbl .= "<td>".$amount."</td>";
	$tbl .= "<td>".$count."</td>";
	$tbl .= "<td>".$date."</td>";
	$tbl .= "</tr>";

	$option2	= array(
		['font-size'=>6],
		['font-style'=>'bold','wrap_text'=>true],
		['fill'=>'#ffc'],
		['color'=>'#00f'],
		['border'=>'bottom','width'=>300]
	);
	array_push($rowArr, array($id,$title,$amount,$count,$date));
}

$tbl		.= "</tbody>";
$tbl		.= "</table>";
echo $tbl;

$writer 	= new XLSXWriter();
$writer->setRightToLeft(true);
$writer->writeSheetHeader('Sheet1', $header, $option1);
foreach($rowArr as $row)
	$writer->writeSheetRow('Sheet1', $row, $option2);
$writer->writeToFile('report.xlsx');
echo "<a href=\"report.xlsx\">دانلود اکسل</a>";
?>

همان‌طور که در فایل index.php مشاهده می‌کنید برای ساخت فایل اکسل از داده‌ها، چند مولفه اصلی داریم و تعدادی پارامتر فرعی:

سطر new XLSXWriter() یک آبجکت از کلاس را ایجاد می‌کند
سطر writeSheetHeader('Sheet1', $header) هدر یا عنوان ستون‌های فایل را جای‌گذاری می‌کند
سطر writeSheetRow('Sheet1', $row) مقادیر هر ردیف فایل اکسل را مقداردهی می‌کند
سطر writeToFile('report.xlsx') فایل خروجی را ذخیره می‌کند
سایر پارامترها: به‌کمک این کلاس می‌توانیم جزییات بیشتری به فایل اکسل ایجاد شده بیفزاییم؛ مثلا با استفاده از setRightToLeft خروجی را راست به چپ کنیم، همین‌طور با افزودن پارامتر $option در writeSheetHeader یا writeSheetHeader مشخص کنیم که هر سلول چه خصوصیات یا فرمتی داشته باشد. ویژگی‌هایی مثل فونت، اندازه، رنگ، پس‌زمینه، عرض، ارتفاع، خطوط و فرمت‌هایی مانند text، Integer، price، date و نظایر آن که با مشاهده «دمو» یا دانلود مثال این مقاله می‌توانید نتیجه کار را مشاهده فرمایید.

دیدگاه ها

Captcha
پیوست مقاله
همچنین بخوانید
تازه ترین دیدگاه ها
x