在使用php excel處理數據的過程中,透視是一個非常實用的功能。透視能夠通過某個字段來統計數據,并按照指定的方式進行分組,最終呈現出比較直觀的結果。下面我們就來了解一下php excel如何實現透視的功能。
首先,我們需要創建一個Excel文件,用于存放需要進行透視的數據。以下是一個簡單的例子,我們通過循環來創建數據:
$phpExcel = new PHPExcel(); $sheet = $phpExcel->getActiveSheet(); $sheet->setCellValue('A1', '日期') ->setCellValue('B1', '銷售員') ->setCellValue('C1', '產品') ->setCellValue('D1', '金額') ->setCellValue('E1', '數量'); for ($i = 2; $i< 12; $i++) { $date = '2021-08-'.$i; $seller = 'Seller '.($i%2+1); $product = 'Product '.($i%3+1); $amount = rand(10, 100); $quantity = rand(1, 5); $sheet->setCellValue('A'.$i, $date) ->setCellValue('B'.$i, $seller) ->setCellValue('C'.$i, $product) ->setCellValue('D'.$i, $amount) ->setCellValue('E'.$i, $quantity); }
以上代碼創建了日期、銷售員、產品、金額和數量五個字段的數據,并將其保存在一個Excel文件中。接下來,我們需要通過php excel提供的透視功能來對這些數據進行統計分析。
首先,我們需要選中需要進行透視的數據范圍。以下代碼指定了數據范圍為A1到E11:
$dataRange = 'A1:E11'; $sheet->setAutoFilter($dataRange); $sheet->getStyle($dataRange)->getFont()->setSize(11); $sheet->getStyle($dataRange)->getAlignment()->setWrapText(true);
接下來,我們需要指定透視表的位置和數據字段。以下代碼將透視表放在G1位置,指定了需要統計的字段為金額,同時按照銷售員進行分組:
$reportRange = 'G1:H10'; $sheet->setCellValue('G1', '銷售員'); $sheet->setCellValue('H1', '金額'); $salesmanField = $sheet->getPivotDataValue($dataRange, PHPExcel_Cell::stringFromColumnIndex(3), PHPExcel_Cell::stringFromColumnIndex(0), $sheet->getHighestDataRow()); $sumValue = $sheet->getPivotDataValue($dataRange, PHPExcel_Cell::stringFromColumnIndex(4), PHPExcel_Cell::stringFromColumnIndex(0), $sheet->getHighestDataRow(), PHPExcel_Worksheet_PivotTable::AGGREGATE_FUNCTION_SUM); $pivotTableSettings = array( 'name' =>'銷售統計', 'columnFields' =>array(PHPExcel_Cell::stringFromColumnIndex(1)), 'dataFields' =>array( $salesmanField =>array( 'type' =>PHPExcel_Worksheet_PivotTable_DataField::DATA_TYPE_NUMBER, 'defaultSubtotal' =>PHPExcel_Worksheet_PivotTable_DataField::SUBTOTAL_FUNCTION_SUM, 'subtotalCaption' =>'總計' ) ), 'rowFields' =>array( PHPExcel_Cell::stringFromColumnIndex(2) ) ); $sheet->addPivotTable(new PHPExcel_Worksheet_PivotTable($pivotTableSettings, $dataRange, $reportRange, $sumValue));
以上代碼指定了透視表的位置為G1到H10,將銷售員作為列,產品作為行,金額作為值進行統計。
最終,我們需要將透視表的樣式設置為可讀,并輸出到一個新的Excel文件中。以下代碼將透視表樣式設置為11號字體、自動換行,并將結果保存到一個新的Excel文件中:
$sheet->getStyle($reportRange)->getFont()->setSize(11); $sheet->getStyle($reportRange)->getAlignment()->setWrapText(true); $objWriter = PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007'); $objWriter->save('pivotTable.xlsx');
到此為止,我們就成功地使用php excel實現了透視的功能。最終結果如下圖所示:
![透視表結果](https://i.loli.net/2022/02/07/8gNFJCRrBzscih1.png)