php操做Excelphp
1.new PHPExcel對象
$objPHPExcel = new PHPExcel();數組
2表的初始化設置
$objPHPExcel->getProperties()->setCreator($project_info['chief_name']) //建立人
->setLastModifiedBy($project_info['chief_name']) //最後修改人
->setTitle($project_info['chenghu'] . '先生/女士裝修報價單') //標題
->setSubject($project_info['chenghu'] . '先生/女士裝修報價單') //主題
->setDescription($project_info['chenghu'] . '先生/女士裝修報價單') //描述
->setKeywords($project_info['chenghu'] . '先生/女士裝修報價單') //關鍵詞
->setCategory($project_info['chenghu'] . '先生/女士裝修報價單'); //分類
//表格頭部
$objPHPExcel->setActiveSheetIndex(0);//第一個sheet
$objPHPExcel->getActiveSheet()->setTitle($project_info['chenghu'] . '先生&女士裝修報價單');//第一頁對應的標題
$objPHPExcel->getDefaultStyle()->getFont()->setSize(13);//設置默認字體大小13
//表格內容字體
$objPHPExcel->getActiveSheet()->getStyle($cv)->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle($cv . ($bench + 1))->getFont()->setBold(true);//字體加粗excel
$objPHPExcel->getActiveSheet()->mergeCells('A' . ($bench + 1) . ':G' . ($bench + 1));//水平合併A-G的列
$objPHPExcel->getActiveSheet()->setCellValue('A' . ($bench + 1), $str);//設置單元格的值對象
$bench 表明行數
$colsymbol表明按順序用到的列的集合,是個數組
$cellwidth 表明按順序用到的單元格寬度的集合,是個數組
$rowheight 表明單元格高度的集合,是個數組ip
foreach ($rowheight as $rk => $rv) {
foreach ($colsymbol as $k => $cv) {
$objPHPExcel->getActiveSheet()->getColumnDimension($cv)->setWidth($cellwidth[$k]);
$objPHPExcel->getActiveSheet()->getRowDimension($rk + 1)->setRowHeight($rv);
if ($cv == 'G') {
$objPHPExcel->getActiveSheet()->mergeCells('A' . ($rk + 1) . ':G' . ($rk + 1));
$objPHPExcel->getActiveSheet()->setCellValue('A' . ($rk + 1), $headercontent[$rk]);
}
}
}get
以上代碼段奠基了這張表的格局string
整體思路,以操做單元格爲基準來定位,橫座標是行號,縱座標是列數
設置單元格格式,設置單元格內容,合併單元格這幾個常規操做的方法要運用自如it
簡單的導出
YiiUtils::exportExcel($title, $exceldata);io
$title = date('Y-m-d').'數據';
var_dump($exceldata)的數據以下:
array (size=288)
0 =>
array (size=4)
0 => string '項目名稱' (length=12)
1 => string '單位' (length=6)
2 => string '單價' (length=6)
3 => string '工藝說明及材料說明' (length=27)
1 =>
array (size=4)
0 => string '衛生間基層回填(從樓盤運碎磚)' (length=45)
1 => string '㎡' (length=3)
2 => string '250' (length=3)
3 => string '⑴用外樓盤碎磚及砼結構碎渣回填,從樓盤外運到工地。' (length=75)
2 =>
array (size=4)
0 => string '衛生間基層回填' (length=21)
1 => string '㎡' (length=3)
2 => string '11500' (length=5)
3 => string '⑴用本工地碎磚及砼結構碎渣回填(深度500mm之內)' (length=66)
3 =>
array (size=4)
0 => string '衛生間基層回填(從樓下運碎磚)' (length=45)
1 => string '㎡' (length=3)
2 => string '12000' (length=5)
3 => string '⑴用本樓盤其餘碎磚及砼結構碎渣回填,樓下有碎磚需從樓下運到工地。' (length=96)
......
已key爲行號,二維數組的每一個值爲列的值
/**
*
*讀取excel文件中的第一個工做表並將內容已數組形式輸出
*$filePath爲上傳文件的絕對路徑
**/
public static function readExcel($filePath)
{
$PHPExcel = new PHPExcel();
/**默認用excel2007讀取excel,若格式不對,則用以前的版本進行讀取*/ $PHPReader = new PHPExcel_Reader_Excel2007(); if (!$PHPReader->canRead($filePath)) { $PHPReader = new PHPExcel_Reader_Excel5(); if (!$PHPReader->canRead($filePath)) { return array(); } } $contentArr = array(); $PHPExcel = $PHPReader->load($filePath); /**讀取excel文件中的第一個工做表*/ $currentSheet = $PHPExcel->getSheet(0); /**取得最大的列號*/ $allColumn = $currentSheet->getHighestColumn(); /**取得一共有多少行*/ $allRow = $currentSheet->getHighestRow(); /**從第二行開始輸出,由於excel表中第一行爲列名*/ for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) { /**從第A列開始輸出*/ $item = array(); for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) { $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue(); $item[] = $val; } $contentArr[] = $item; } return $contentArr;}