در این قسمت کلاس خیلی مفیدی معرفی می کنیم که برای تولید فایل ها اکسل دارای چندین کاربرگ(sheet) استفاده می شود.
اغلب مواقع نیاز داریم تا رکوردهای اطلاعاتی را بصورت excel تولید کنیم. این کار دارای مزایای زیادی است ، می توان برای انتقال اطلاعات از یک نرم افزار به نرم افزار excel یا حتی نرم افزار دیگر ، از این فرمت استفاده کرد.
کلاس xlsxwriter
کلاس xlsxwriter برای ساخت خروجی اطلاعات با فرمت اکسل (xlsx) بکار می رود . با کمک این کلاس می توانید :
- فایل های ساده اکسل با یک شیت بسازید.
- فایل های اکسل با چندین شیت بسازید.
- برای اطلاعات از فرمت های دلخواه استفاده کنید.
- در تولید فایل اکس از رنگ ها استفاده کنید.
- فایل های پیشرفته اکسل را تولید کنید.
مثال 1- ساخت فایل ساده اکسل
<?php set_include_path( get_include_path().PATH_SEPARATOR.".."); include_once("xlsxwriter.class.php"); $header = array( 'c1-text'=>'string',//text 'c2-text'=>'@',//text 'c3-integer'=>'integer', 'c4-integer'=>'0', 'c5-price'=>'price', 'c6-price'=>'#,##0.00',//custom 'c7-date'=>'date', 'c8-date'=>'YYYY-MM-DD', ); $rows = array( array('x101',102,103,104,105,106,'2018-01-07','2018-01-08'), array('x201',202,203,204,205,206,'2018-02-07','2018-02-08'), array('x301',302,303,304,305,306,'2018-03-07','2018-03-08'), array('x401',402,403,404,405,406,'2018-04-07','2018-04-08'), array('x501',502,503,504,505,506,'2018-05-07','2018-05-08'), array('x601',602,603,604,605,606,'2018-06-07','2018-06-08'), array('x701',702,703,704,705,706,'2018-07-07','2018-07-08'), ); $writer = new XLSXWriter(); $writer->writeSheetHeader('Sheet1', $header); foreach($rows as $row) $writer->writeSheetRow('Sheet1', $row); //$writer->writeSheet($rows,'Sheet1', $header);//or write the whole sheet in 1 call $writer->writeToFile('xlsx-simple.xlsx'); //$writer->writeToStdOut(); //echo $writer->writeToString();
مثال 2 – ساخت فایل خروجی اکسل با چند شیت
<?php set_include_path( get_include_path().PATH_SEPARATOR.".."); include_once("../xlsxwriter.class.php"); $header = array( 'year'=>'string', 'month'=>'string', 'amount'=>'price', 'first_event'=>'datetime', 'second_event'=>'date', ); $data1 = array( array('2003','1','-50.5','2010-01-01 23:00:00','2012-12-31 23:00:00'), array('2003','=B2', '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'), array('2003',"'=B2", '23.5','2010-01-01 00:00:00','2012-12-31 00:00:00'), ); $data2 = array( array('2003','01','343.12','4000000000'), array('2003','02','345.12','2000000000'), ); $writer = new XLSXWriter(); $writer->writeSheetHeader('Sheet1', $header); foreach($data1 as $row) $writer->writeSheetRow('Sheet1', $row); foreach($data2 as $row) $writer->writeSheetRow('Sheet2', $row); $writer->writeToFile('xlsx-sheets.xlsx'); //$writer->writeToStdOut(); //echo $writer->writeToString(); exit(0);
مثال 3 – ساخت فایل خروجی اکسل با ستون های فرمت دار
<?php set_include_path( get_include_path().PATH_SEPARATOR.".."); include_once("xlsxwriter.class.php"); $sheet1header = array( 'c1-string'=>'string', 'c2-integer'=>'integer', 'c3-custom-integer'=>'0', 'c4-custom-1decimal'=>'0.0', 'c5-custom-2decimal'=>'0.00', 'c6-custom-percent'=>'0%', 'c7-custom-percent1'=>'0.0%', 'c8-custom-percent2'=>'0.00%', 'c9-custom-text'=>'@',//text ); $sheet2header = array( 'col1-date'=>'date', 'col2-datetime'=>'datetime', 'custom-date1'=>'YYYY-MM-DD', 'custom-date2'=>'MM/DD/YYYY', 'custom-date3'=>'DD-MMM-YYYY HH:MM AM/PM', 'custom-date4'=>'MM/DD/YYYY HH:MM:SS', 'custom-date5'=>'YYYY-MM-DD HH:MM:SS', 'custom-date6'=>'YY MMMM', 'custom-date7'=>'QQ YYYY', ); $sheet3header = array( 'col1-dollar'=>'dollar', 'col2-euro'=>'euro', 'custom-amount1'=>'0', 'custom-amount2'=>'0.0',//1 decimal place 'custom-amount3'=>'0.00',//2 decimal places 'custom-currency1'=>'#,##0.00',//currency 2 decimal places, no currency/dollar sign 'custom-currency2'=>'[$$-1009]#,##0.00;[RED]-[$$-1009]#,##0.00',//w/dollar sign 'custom-currency3'=>'#,##0.00 [$€-407];[RED]-#,##0.00 [$€-407]',//w/euro sign 'custom-currency4'=>'[$¥-411]#,##0;[RED]-[$¥-411]#,##0', //japanese yen 'custom-scientific'=>'0.00E+000',//-1.23E+003 scientific notation ); $pi = 3.14159; $date = '2018-12-31 23:59:59'; $amount = '5120.5'; $writer = new XLSXWriter(); $writer->setAuthor('Some Author'); $writer->writeSheetHeader('BasicFormats',$sheet1header); $writer->writeSheetRow('BasicFormats',array($pi,$pi,$pi,$pi,$pi,$pi,$pi,$pi,$pi) ); $writer->writeSheetHeader('Dates',$sheet2header); $writer->writeSheetRow('Dates',array($date,$date,$date,$date,$date,$date,$date,$date,$date) ); $writer->writeSheetHeader('Currencies',$sheet3header); $writer->writeSheetRow('Currencies',array($amount,$amount,$amount,$amount,$amount,$amount,$amount,$amount,$amount) ); $writer->writeToFile('xlsx-formats.xlsx'); //$writer->writeToStdOut(); //echo $writer->writeToString(); echo '#'.floor((memory_get_peak_usage())/1024/1024)."MB"."\n"; exit(0);
مثال 4 – ساخت فایل خروجی اکسل دارای قالب بندی
<?php set_include_path( get_include_path().PATH_SEPARATOR.".."); include_once("xlsxwriter.class.php"); $writer = new XLSXWriter(); $styles1 = array( 'font'=>'Arial','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom'); $styles2 = array( ['font-size'=>6],['font-size'=>8],['font-size'=>10],['font-size'=>16] ); $styles3 = array( ['font'=>'Arial'],['font'=>'Courier New'],['font'=>'Times New Roman'],['font'=>'Comic Sans MS']); $styles4 = array( ['font-style'=>'bold'],['font-style'=>'italic'],['font-style'=>'underline'],['font-style'=>'strikethrough']); $styles5 = array( ['color'=>'#f00'],['color'=>'#0f0'],['color'=>'#00f'],['color'=>'#666']); $styles6 = array( ['fill'=>'#ffc'],['fill'=>'#fcf'],['fill'=>'#ccf'],['fill'=>'#cff']); $styles7 = array( 'border'=>'left,right,top,bottom'); $styles8 = array( ['halign'=>'left'],['halign'=>'right'],['halign'=>'center'],['halign'=>'none']); $styles9 = array( array(),['border'=>'left,top,bottom'],['border'=>'top,bottom'],['border'=>'top,bottom,right']); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles1 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles2 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles3 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles4 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles5 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles6 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles7 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles8 ); $writer->writeSheetRow('Sheet1', $rowdata = array(300,234,456,789), $styles9 ); $writer->writeToFile('xlsx-styles.xlsx');