## 本代碼是以phpexcel為核心制作的一個excel多維數組生成excel文檔實例
> phpexcel composer 位置
```powershell
composer require phpoffice/phpexcel
```
代碼
```php
function doExcel($words,$data,$title){
$objPHPExcel = new \PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
foreach($words as $k=>$maps){
$objPHPExcel->getActiveSheet()->setCellValueExplicit($k.'1',$maps['title'])->getStyle($k.'1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER)->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER)
->getActiveSheet()->getColumnDimension($k)->setWidth(mb_strlen($maps['title'])*3.5);
}
foreach($data as $key=>$maps){
foreach($words as $k=>$map){
$value='';
if(strpos($map['field'],'!')!==false){
$field=explode('!',$map['field']);
$vq=$maps[$field[0]];
$kv=explode(',',$field[1]);
foreach($vq as $vn){
foreach($kv as $t){
$v=explode('-',$t);
$ts=explode('.',$v[1]);
$vt='';
foreach($ts as $tv){
$vt=$vt==''?($vn[$tv]??'-'):($vt[$tv]??'-');
}
$value.=$v[0].'-'.$vt." ";
}
$value.="\r\n";
}
$value=trim($value,'-');
}else{
$field=explode('.',$map['field']);
foreach($field as $vs){
$value=$value==''?($maps[$vs]??'-'):($value[$vs]??'-');
}
}
$objPHPExcel->getActiveSheet()->setCellValueExplicit($k . ceil($key + 2), $value,\PHPExcel_Cell_DataType::TYPE_STRING)
->getStyle($k . ceil($key + 2))->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER)->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER)
->getActiveSheet()->getColumnDimension($k)->setWidth(mb_strlen($value)*3.5<mb_strlen($map['title'])*3.5?mb_strlen($map['title'])*3.5:mb_strlen($value)*3.5);
}
}
ob_end_clean();
ob_start();
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition:attachment;filename="'.$title.'【' . date("YmdHis") . '】.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
}
```
使用
```php
$name='導出'.'-【'.date("Y/m/dhis").'】';
$data=[];//要導出的多維度數組數據
$words = [
"A" => ['title' => '銷售部門', 'field' => 'user.branch.title'],
"B" => ['title' => '銷售員', 'field' => 'user.nickname'],
"C" => ['title' => '客戶昵稱', 'field' => 'client.name'],
"D" => ['title' => '客戶聯系電話', 'field' => 'client.mobile'],
"E" => ['title' => '購買商品', 'field' => "goods!標題-title,單價-price,數量-num,退款-refund_price,總計-total_price,合計-real_price,材料-material.name,材料剩余-material.num"],
"F" => ['title' => '付款方式', 'field' => "pay_type"],
"G" => ['title' => '發貨類型', 'field' => "send_type"],
"H" => ['title' => '期望發貨日期', 'field' => "expect_at"],
"I" => ['title' => '貨站', 'field' => "freight_station"],
"J" => ['title' => '發貨地', 'field' => "send_address"],
"K" => ['title' => '總計', 'field' => "price"],
"L" => ['title' => '退貨', 'field' => "refund_price"],
"M" => ['title' => '訂單狀態', 'field' => "status_msg"],
"N" => ['title' => '合計', 'field' => "real_price"]
];
doExcel($words, $data, $name);
```
> 參數解讀
> data 為要導出的數據
> words 為excel的基礎信息,title為內容 field為讀取 data里的數據
> field 支持多維度數組查找 ,比如 user.nickname 就是 $data['user']['nickname']
> goods!標題-title,材料-material.name 表示 $data['goods'] 為多維度數據 里查找title 并且title的描述標題為 標題 【,】為多個數據查詢 material.name 就是 $data['goods'][$i]['material']['name']
> 如此按照上述編寫,即可完成多維度數組的導出了
>