我发现最近的项目需要导出Excel表的页面非常的多,想来这个也是我们常用的功能了,现在我可以很熟练的导出了,但是记得当时自己第一次导出时还是绕了一些弯路的,那么现在我就来记录下我这次用exshop框架项目下的导出(其实在不同的框架下Excel的导出原理都是差不多的)
前端
导出
控制器
``` // 导出数据 public function export() { $result = $this->_oaOrderModel->getAllOrderListForManager($this->store_id, $orderSn=null, $buyer_id=null, $buyer_name=null, $consignee=null, $phone=null, $company_name=null, $status=null, $s_time=null, $e_time=null, $page=null, $listRows=null, $execl=true); //这个是获得数据的代码-model里 $orderList = $result['orderList']; if (!empty($orderList)) { $j = 1; $stmt = array(); foreach ($orderList as $val) { $stmt[$j]['网站ID'] = $val['store_id']; $stmt[$j]['订单信息'] = $val['order_sn']; $stmt[$j]['商品信息'] = $val['inventory_sn_count_chinese']; $stmt[$j]['工艺选择'] = $val['craft_count_chinese']; $stmt[$j]['商品总数量'] = $val['real_goods_total_count']; $stmt[$j]['提交日期'] = date("Y-m-d H:i:s",$val['add_time']); $stmt[$j]['客户名称'] = $val['company_name']; $stmt[$j]['联系人'] = $val['consignee']; $stmt[$j]['联系方式'] = $val['phone_mob']; $stmt[$j]['订单完成率'] = $val['percentage_complete']; $stmt[$j]['订单状态'] = $val['statusChinese']; $j++; } $current_path = dirname(FILE); $home_path = dirname($current_path); require_once ROOT_PATH . '/includes/libraries/PHPExcel.php'; require_once ROOT_PATH . '/includes/libraries/PHPExcel/IOFactory.php'; $objPHPExcel = new PHPExcel(); //这个方法自己下载放到公共方法里 $objPHPExcel->getProperties()->setCreator("Maarten Balliauw") ->setLastModifiedBy("Maarten Balliauw") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file");
// 行高 for ($i = 2; $i <= count($stmt); $i++) { $objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(22); } foreach ($stmt as $fid => $fval) { if ($fid == 1) { $key = 0; foreach ($fval as $title => $first) { //如果一级标题 $objPHPExcel->getActiveSheet()->setCellValue(chr($key + 65) . '1', $title); $objPHPExcel->getActiveSheet()->getStyle(chr($key + 65) . '1')->getFont()->setBold(true); // 加粗 $key ++; } } $cid = 0; $row_id = $fid + 1; foreach ($fval as $cval) { $objPHPExcel->getActiveSheet()->setCellValue(chr($cid + 65) . (string) ($row_id), $cval); $cid++; } } $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setTitle('Excel表'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //$objWriter->save('订单列表详细.xls'); //输出到浏览器 header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="订单列表.xls"'); header("Content-Transfer-Encoding: binary"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); $objWriter->save('php://output'); }}```
注意:PHPExcel(); //这个方法自己下载放到公共方法里
成果图
心得
有时候遇到这些问题可以多思考,多看看它的原理,原理理解了下次做其它的也是会的,但最重要的是要懂得做记录,我们的记忆并没有想象的那么好
注:文章来源雨中笑记录实习期遇到的问题与心得,转载请申明原文