php的两种导出为excel表方法
<?php /** * phpexcel导出excel 在thinkphp项目中,基于thinkphp的一个CRM系统原有的导出功能有bug,如果列多一点就有问题 * **/ public function phpExcelExport($contractList) { C('OUTPUT_ENCODE', false); import("ORG.PHPExcel.PHPExcel"); $objPHPExcel = new PHPExcel(); $objProps = $objPHPExcel->getProperties(); $objProps->setCreator("5kcrm"); $objProps->setLastModifiedBy("5kcrm"); $objProps->setTitle("5kcrm Contract"); $objProps->setSubject("5kcrm Contract Data"); $objProps->setDescription("5kcrm Contract Data"); $objProps->setKeywords("5kcrm Contract Data"); $objProps->setCategory("5kcrm"); $objPHPExcel->setActiveSheetIndex(0); $objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->setTitle('Sheet1'); $ascii = 65; $cv = ''; //$field_list = M('Fields')->where('model = \'Contract\'')->order('customer_id')->select(); //$field_list = M('contract')->where(array('is_deleted'=>'0'))->order(array('customer_id'=>'desc'))->select(); //$field_list = M('contract')->where(array('is_deleted'=>'0'))->field('content,delete_time',true)->select(); $field_list = M('Fields')->where('model = \'contract\'')->order('order_id')->select(); // print_r($contractList); //println($field_list);die; $cv = chr($ascii); foreach ($field_list as $field) { //$objActSheet->setCellValue($cv.chr($ascii).'2', $field['number']); $objActSheet->setCellValue($cv . '2', $field['name']); $tempCv = ''; $ascii = ord(substr($cv, -1)); $cv = substr($cv, 0, -1); $ascii++; while ($ascii > 90) { $ascii = 65; $tempCv = chr($ascii) . $tempCv; if (strlen($cv) > 0) { $ascii = ord(substr($cv, -1)); $cv = substr($cv, 0, -1); $ascii++; } } $tempCv = chr($ascii) . $tempCv; $cv .= $tempCv; } $mark_Contract_cv = $cv; if (is_array($contractList)) { $list = $contractList; } else { $where['owner_role_id'] = array('in', implode(',', getSubRoleId())); $where['is_deleted'] = 0; $list = M('Contract')->where($where)->select(); } $i = 2; foreach ($list as $k => $v) { $dateList = M('contract')->where("contract_id = $v[contract_id]")->field('content', true)->find(); $zxzj = getUserByRoleId($dateList['zxzj_role_id']); $bmzg = getUserByRoleId($dateList['bmzg_role_id']); $list[$k]['zxzj_name'] = $zxzj['user_name']; $list[$k]['bmzg_name'] = $bmzg['user_name']; } foreach ($list as $k => $v) { $date = M('contract')->where("contract_id = $v[contract_id]")->field('content', true)->find(); /*$zxzj = getUserByRoleId($date['zxzj_role_id']); $bmzg = getUserByRoleId($date['bmzg_role_id']); $list[$k]['zxzj_name'] = $zxzj['user_name']; $list[$k]['bmzg_name'] = $bmzg['user_name'];*/ //println($list);die; //print_r($date);die; //var_dump($v); if (!empty($date)) { $v = $v + $date; } $i++; $ascii = 65; //$cv = 'A'; $cv = chr($ascii); foreach ($field_list as $field) { if ($field['form_type'] == 'datetime') { $objActSheet->setCellValue($cv . $i, date('Y-m-d', $v[$field['field']])); } elseif ($field['form_type'] == 'number' || $field['form_type'] == 'floatnumber' || $field['form_type'] == 'phone' || $field['form_type'] == 'mobile' || ($field['form_type'] == 'text' && is_numeric($v[$field['field']]))) { //防止使用科学计数法,在数据前加空格 $objActSheet->setCellValue($cv . $i, ' ' . $v[$field['field']]); } else { $objActSheet->setCellValue($cv . $i, $v[$field['field']]); } $tempCv = ''; $ascii = ord(substr($cv, -1)); $cv = substr($cv, 0, -1); $ascii++; while ($ascii > 90) { $ascii = 65; $tempCv = chr($ascii) . $tempCv; if (strlen($cv) > 0) { $ascii = ord(substr($cv, -1)); $cv = substr($cv, 0, -1); $ascii++; } } $tempCv = chr($ascii) . $tempCv; $cv .= $tempCv; } } $objActSheet->mergeCells('A1:' . $mark_Contract_cv . '1'); //$objActSheet->mergeCells($mark_Contract_cv.chr($mark_Contract_ascii).'1'); $objActSheet->getStyle('A1')->getFont()->getColor()->setARGB('FFFF0000'); $objActSheet->getStyle('A1')->getAlignment()->setWrapText(true); $objActSheet->getStyle($mark_Contract_cv . '1')->getFont()->getColor()->setARGB('FFFF0000'); $objActSheet->getStyle($mark_Contract_cv . '1')->getAlignment()->setWrapText(true); $objActSheet->setCellValue('A1', L('CONTRACT_INFO')); //设置背景色 $objActSheet->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle('A1')->getFill()->getStartColor()->setARGB('F5DEB3'); $objActSheet->getStyle($mark_Contract_cv . '1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle($mark_Contract_cv . '1')->getFill()->getStartColor()->setARGB('FFFFE0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); ob_end_clean(); header("Content-Type: application/vnd.ms-excel;"); header("Content-Disposition:attachment;filename=5kcrm_contract_" . date('Y-m-d', mktime()) . ".xls"); header("Pragma:no-cache"); header("Expires:0"); $objWriter->save('php://output'); } //直接导出为excel public function simpleExcelExport(){//todo 简单输出会把模板中内容也输出,没有die掉。 $date = M('Contract')->where(array('is_deleted'=>'0'))->select(); header("Content-Type: application/vnd.ms-excel; charset=gbk"); header("Content-Disposition:filename=xls_region.xls"); echo '<table>'; echo '<tr>'; echo ' <th>合同编号</th>'; echo ' <th>商机</th>'; echo ' <th>合同价格</th>'; echo ' <th>到期时间</th>'; echo ' <th>描述</th>'; echo ' <th>状态</th>'; echo ' <th>合作项目</th>'; echo ' <th>合作成本</th>'; echo ' <th>合作性质</th>'; echo '</tr>'; foreach ($date as $k => $r) { echo '<tr>'; echo '<th>'.$r['number'].'</th>'; echo '<th>'.$r['business_id'].'</th>'; echo '<th>'.$r['price'].'</th>'; echo '<th>'.$r['due_time'].'</th>'; echo '<th>'.$r['description'].'</th>'; echo '<th>'.$r['status'].'</th>'; echo '<th>'.$r['hzxm'].'</th>'; echo '<th>'.$r['hzcb'].'</th>'; echo '<th>'.$r['hzxz'].'</th>'; echo '</tr>'; } echo '</table>'; die();// 防止在模板中把其他内容导出来 } ?>