天天看點

phpexcel導出資料,用數組周遊導出表頭

導出excel,比較常用的是,一列一列的列印到表格上,像這種:

$objPHPExcelActiveSheet->setCellValue('A1', '姓名');
$objPHPExcelActiveSheet->setCellValue('B1', '性别');
$objPHPExcelActiveSheet->setCellValue('C1', '年齡');
$objPHPExcelActiveSheet->setCellValue('D1', '成績');
$objPHPExcelActiveSheet->setCellValue('E1', '學号');
           

這種比較簡單,但是可維護性比較差,假如後期要在中間插一列,改動就比較大,比較麻煩。是以,最好是用數組來循環表頭,像這樣:

$config = array(
    array(10, '姓名'), array(10, '性别'), array(15, '年齡'),
   array(20, '成績'), array(20, '學号')
);
$objPHPExcel = new PHPExcel ();

//參數依次為excel對象、表頭數組、表頭起始行、預設行高
$lastColumn = setPHPExcelHeader($objPHPExcel, $config, 5, 15);


function setPHPExcelHeader(&$excelClass, $config, $startRow, $defaultRowHeight = 20)
{
    if (gettype($excelClass) == 'object') {
        if (is_array($config) && sizeof($config)) {
            foreach ($config as $k => $v) {
                $letter = '';
                $letter = getLetterColumn($k);
                if ($letter) {
                    $excelClass->getActiveSheet()->getColumnDimension($letter)
            ->setWidth($v[0]);
                   $excelClass->getActiveSheet()->setCellValue($letter . $startRow, $v[1]);
                }
            }
        }
        $excelClass->getActiveSheet()->getDefaultRowDimension()
             ->setRowHeight($defaultRowHeight);
    }
    return $letter;
}

//表格資料部分
$column = 0;

//用getLetterCllumn($column)來表示列,新增列隻需$column++即可
//如下,就表示,向A2寫入‘張三’,向B2寫入‘男’
$objPHPExcel->getActiveSheet()->setCellValue(getLetterColumn($column++) . '2', '張三');
$objPHPExcel->getActiveSheet()->setCellValue(getLetterColumn($column++) . '2', '男');
           

這樣後期要新增列,隻需要在數組中間添加元素即可。