protected $is_export = false;//是否開啟導出
protected $exportName = '';//導出excel名稱
protected $exportField = '';//導出excel名稱
public function create()
{
if(!$this->is_export) $this->error('未開啟導出');
$request = $this->request;
try{
$page = $request->post('page', 1);
$tableName = $this->model->getTable();//獲取表名
$prefix = getenv('DB_PREFIX');//獲取表前綴
$tables = Db::select("SHOW FULL COLUMNS FROM `{$prefix}{$tableName}`");//查詢表結構
$exportField = [];
foreach ($tables as $key=>$value){
$exportField[] = $value->Comment?:$value->Field;//處理表結構
}
$page_pre = $request->post('limit')??$this->model->count();
$data = $this->model->index( $this->filter, $page, $page_pre, $this->field, $this->order, $this->join);
$exportName = "導出".(!empty($this->exportName)?$this->exportName:$tableName)."信息".date('Y-m-d',time());
if(!empty($this->exportField)){
$exportField = $this->exportField;
}
$path = Excel::excelExport($exportName,$exportField,$data->toArray()['data']);
$this->back['path'] = $path;
}catch (\Exception $e){
$this->error($e->getMessage());
}
$this->success('導出成功');
}
public static function excelExport($title="",$headArr = [], $data = [],$fileName = '') {
$fileName .= "_" . date("Y_m_d", time());
$spreadsheet = new Spreadsheet();
$objPHPExcel = $spreadsheet->getActiveSheet();
$objPHPExcel->setTitle($title);
$objPHPExcel->setCellValueByColumnAndRow(1, 1, $title);
// 設置表頭
$key = ord("A");
foreach ($headArr as $v) {
$colum = chr($key);
$objPHPExcel->setCellValue($colum . '1', $v);
$key += 1;
}
$column = 2;
foreach ($data as $key => $rows) { // 行寫入
$span = ord("A");
foreach ($rows as $keyName => $value) { // 列寫入
$objPHPExcel->setCellValue(chr($span) . $column, $value);
$span++;
}
$column++;
}
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$path = public_path().'/excel/'.$title.'.xls';
$writer->save($path);
//刪除臨時的sheet
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
return $path;
}
列寫入值那里還是要加入設置單元格格式,不然長數(shù)字就會變成科學計數(shù)法
$objPHPExcel->setCellValue(chr($span) . $column,$value,PHPExcel_Cell_DataType::TYPE_STRING);
你這個在最新版已經沒有第三個參數(shù)了,第一種$objPHPExcel->setCellValueExplicitByColumnAndRow($keyName+1,$key+2,$value,DataType::TYPE_STRING); $keyName必須是int,$key類型int,第二種$objPHPExcel->setCellValue(chr($span) . $column, ' '.$value);
$this->model->index()是封裝的查詢數(shù)據(jù)操作