导出的时候提示Class 'XMLWriter' not found,解决方法是:
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007'); 改为 $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5')
下面是我的代码,mark一下.
if(!empty($_POST['out'])) { error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); date_default_timezone_set('Europe/London'); if (PHP_SAPI == 'cli') die('This example should only be run from a Web Browser'); /** Include PHPExcel */ require_once dirname(__FILE__) . '/PHPExcel.php';//不同的地方,请写入不同的路径 // Create new PHPExcel object $objPHPExcel = new PHPExcel();//初始化主类. // Set document properties 设置属性 $objPHPExcel->getProperties()->setCreator("Maarten Balliauw") ->setLastModifiedBy("Maarten Balliauw") ->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"); // Miscellaneous glyphs, UTF-8 //将要获取目标表数据,这个地方我用的是TP框架,所以这样写,不同的框架,有不同拿到数据的方法,请根据自己情况自定义 $list = $User->where('sell=1')->field('giftpic,id,giftname,des,credit,number,sell,addtime')->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select(); foreach($list as $a=>$b){ $lamp[] = array_values($b);//把关联数组的下表,换成索引,方便后面的调用 } // 获取目标表的所有字段 $fields = $User->getDbFields(); foreach($fields as $f=>$d){ $ff[][] = $d; } //自己写的excel列名,如果超过26个,超过52个,78个的不同情况,给不同的列名.可以自己再加. $s = 'abcdefghijklmnopqrstuvwxyz'; $aa = str_split($s,1); $b=array(); for($i=0;$i<count($ff);$i++){ if($i<26){ $b[$aa[$i]]=$i; }else if($i<52){ $m='A'; $b[$m.$aa[$i-26]]=$i; }else if($i<78){ $m='B'; $b[$m.$aa[$i-52]]=$i; } } //这个地方,我是自定义的表头,就是导出之后的Excel的第一行,根据自己需要自定义. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('a1','图片'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('b1','ID'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('c1','名称'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('d1','余额'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('e1','积分'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('f1','库存数'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('g1','兑换数'); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('h1','添加时间'); foreach($lamp as $i=>$v) { foreach($b as $kk => $vv) { mb_convert_encoding($v[$vv], "UTF-8"); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($kk.($i+2),$v[$vv]);//把数据写入进去Excel } } // Rename worksheet $objPHPExcel->getActiveSheet()->setTitle('vip');//自定义工作表的名称,可自定义. // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); ob_end_clean();//清除缓冲区的内容,以防导出的内容乱码,不能打开等问题,加上最好. // Redirect output to a client’s web browser (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="01simple.xlsx"'); header('Content-Type: application/vnd.ms-excel;charset=gb2312');//自定义的字符集 header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');//导出的方法实例化 $objWriter->save('php://output');//导出 exit; }