이 글에서는 thinkPHP+phpexcel의 엑셀 보고서 출력 기능을 주로 소개하고, 구체적인 예시를 바탕으로 PHPExcel for Excel 파일을 통합한 thinkPHP의 관련 조작 스킬을 분석해 봤습니다. thinkPHP+phpexcel로 엑셀 출력 기능을 제공합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
1. phpexcel1.7.6 클래스 패키지를 다운로드하고 2. 클래스 패키지 폴더 PHPExcel176의 이름을 변경하면 디렉토리 구조는 아래와 같습니다.
코드 작성(주문 요약 데이터를 예로 사용):1. 데이터베이스 및 테이블을 생성합니다. 2. tp 프로젝트를 생성하고, 프로젝트의 데이터베이스 연결을 구성합니다. 이러한 기본 사항에 대해서는 설명하지 않겠습니다. 3. 프로젝트의 LibAction 아래에 새로운 클래스 파일 ImportStatisticsAction.class.php를 생성한 다음 Excel 내보내기를 구현합니다. 4. 내보내기 방법 단계: ① 데이터 쿼리
②phpexcel 클래스 라이브러리 가져오기 ③Excel 개체 만들기 및 Excel 개체의 속성 설정
④Excel의 행 및 열 스타일 설정(글꼴, 높이 및 너비, 색상, 테두리, 병합 등)
⑤보고서 헤더 그리기
⑥엑셀에 쿼리 데이터 쓰기
7엑셀 시트 이름 설정
⑧엑셀 보고서를 연 후 초기 시트 설정
9헤더 매개 변수 및 파일 이름 설정 출력 excel
⑩Excel 생성 메소드를 호출하여 Excel 파일 생성
코드는 다음과 같습니다.
<?php
/**
* Created by lonm.shi.
* Date: 2012-02-09
* Time: 下午4:54
* To change this template use File | Settings | File Templates.
*/
class ExportStatisticsAction extends Action {
public function index(){
$model= D("OrdersView");
$OrdersData= $model->select(); //查询数据得到$OrdersData二维数组
vendor("PHPExcel176.PHPExcel");
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("ctos")
->setLastModifiedBy("ctos")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
//set width
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(50);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);
//设置行高度
$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);
//set font size bold
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A2:J2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
//设置水平居中
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//合并cell
$objPHPExcel->getActiveSheet()->mergeCells('A1:J1');
// set table header content
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '订单数据汇总 时间:'.date('Y-m-d H:i:s'))
->setCellValue('A2', '订单ID')
->setCellValue('B2', '下单人')
->setCellValue('C2', '客户名称')
->setCellValue('D2', '下单时间')
->setCellValue('E2', '需求机型')
->setCellValue('F2', '需求数量')
->setCellValue('G2', '需求交期')
->setCellValue('H2', '确认BOM料号')
->setCellValue('I2', 'PMC确认交期')
->setCellValue('J2', 'PMC交货备注');
// Miscellaneous glyphs, UTF-8
for($i=0;$i<count($OrdersData)-1;$i++){
$objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $OrdersData[$i]['id']);
$objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $OrdersData[$i]['realname']);
$objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $OrdersData[$i]['customer_name']);
$objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), toDate($OrdersData[$i]['create_time'])); //这里调用了common.php的时间戳转换函数
$objPHPExcel->getActiveSheet(0)->setCellValue('E'.($i+3), $OrdersData[$i]['require_product']);
$objPHPExcel->getActiveSheet(0)->setCellValue('F'.($i+3), $OrdersData[$i]['require_count']);
$objPHPExcel->getActiveSheet(0)->setCellValue('G'.($i+3), $OrdersData[$i]['require_time']);
$objPHPExcel->getActiveSheet(0)->setCellValue('H'.($i+3), $OrdersData[$i]['product_bom_encoding']);
$objPHPExcel->getActiveSheet(0)->setCellValue('I'.($i+3), $OrdersData[$i]['delivery_time']);
$objPHPExcel->getActiveSheet(0)->setCellValue('J'.($i+3), $OrdersData[$i]['delivery_memo']);
$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getRowDimension($i+3)->setRowHeight(16);
}
// sheet命名
$objPHPExcel->getActiveSheet()->setTitle('订单汇总表');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// excel头参数
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="订单汇总表('.date('Ymd-His').').xls"'); //日期为文件名后缀
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel5为xls格式,excel2007为xlsx格式
$objWriter->save('php://output');
}
}
5. /ExportStatistics/index, 프로젝트에서 __APP__/ExportStatistics/index를 직접 호출하면 생성된 보고서가 다운로드되어 저장됩니다. phpexcel1.7.6에서는 코딩 문제가 발견되지 않았으며 속도가 매우 빠릅니다. 내보내기 방법에는 페이지 출력 정보나 디버깅 정보가 없습니다. 그렇지 않으면 내보낸 Excel에서 형식이 잘못되었다는 메시지가 표시됩니다. 효과는 다음과 같습니다.
보고서 내보내기
관련 권장 사항:
ThinkPHP 프레임워크 기반의 데이터베이스 연결 예제
여러 하위 쿼리 문을 구현하는 PHP의 간단한 방법inkphp5+ PHPExcel은 테이블 데이터 일괄 업로드 기능을 구현합니다위 내용은 thinkPHP+phpexcel은 Excel 보고서 출력 기능 예제를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!