mk-j / PHP_XLSXWriter

Lightweight XLSX Excel Spreadsheet Writer in PHP
MIT License
1.84k stars 665 forks source link

how to map data array to header array in PHP_XLSXWriter? #300

Closed prabakaran-p closed 3 years ago

prabakaran-p commented 3 years ago

$filename = "hello.xlsx"; header('Content-disposition: attachment; filename="' . XLSXWriter::sanitize_filename($filename) . '"'); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8"); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public'); $writer = new XLSXWriter(); $header =array('email name', 'sent', 'delivery', 'bounced', 'opened', 'clicked');

$writer->writeSheetHeader('Sheet1', $headerVal, $col_options=array('widths'=>$headerWidth, 'font-style'=>'bold','halign'=>'left','hidden'=>$hiddenVal)); //header

$data = array(array('id'=>2, 'opened'=>3,'delivery'=>3,'email name'=>'hi','sent'=>4,'clicked'=>4), array('id'=>3, 'opened'=>3,'delivery'=>3,'email name'=>'hels','sent'=>4,'clicked'=>4), array('id'=>6, 'opened'=>3,'delivery'=>3,'email name'=>'hi','sent'=>4,'clicked'=>4));

foreach ($data as $value) { $writer->writeSheetRow('Sheet1', $value, $row_options = array('height' => 40, 'wrap_text' => true)); }

The data array to be mapped to the corresponding header. Can anyone help me to find a solution?

ebta commented 3 years ago

You can loop the original data, and create new array value, based on the order of header, for example :

$dataNew = [];
foreach ($data as $val) {
    $newRow = array();
    foreach ($header as $key) {
        $newRow[] = isset($val[$key]) ? $val[$key] : '';
    }
    $dataNew[] = $newRow;
};

foreach ($dataNew as $value) {
     $writer->writeSheetRow('Sheet1', $value, $row_options = array('height' => 40, 'wrap_text' => true));
}
prabakaran-p commented 3 years ago

Thank you @ebta