代码实现:
{pboot:pre}
/** * 下载表格 * @author wusn <message@jswusn.com> */ public function down(){ $db = M($this->table); $data = $db->order('id DESC')->select(); $fileName = get_config('LD_SITE_NAME').'参观登记表-'.date('YmdHis',time()).rand(1000,9999); $excel_title=array('编号','姓名','称呼','公司名称','电话','手机','邮箱','地址','职位','您参观的目的','您所属的行业','如何得知展会','提交时间'); $this->getExcel($fileName,$data,$excel_title); } /** * 输出表格 * @param $fileName 文件名 * @param $data 数据源 * @param $firstSheet 首行数据 * @author wusn < message@jswusn.com > */ private function getExcel($fileName,$data,$firstSheet){ //对数据进行检验 if(empty($data) || !is_array($data)){ die('数据不存在'); } //检查文件名 if(empty($fileName)){ exit(); } import("Common.Lib.PHPExcel",APP_PATH); //创建PHPExcel对象 $PHPExcel = new PHPExcel(); $PHPExcel->createSheet();//创建新的内置表 $PHPExcel->setActiveSheetIndex(0);//把新创建的sheet设定为当前活动sheet $objSheet=$PHPExcel->getActiveSheet();//获取当前活动的sheet // $num = count($firstSheet)-1; // // $arr = range('A','Z'); // $last_line = $arr[$num]; // p($last_line); //循环填充第一行数据 $j=0; foreach (range('A','Z') as $value) { if (!empty($firstSheet[$j])) { $objSheet->setCellValue("{$value}1","{$firstSheet[$j]}"); $j++; } } //数据名称 $get_mudi = set_mudi(); $get_ex = get_ex(); $get_sex = get_sex(); //循环填充数据 $i=1;//从第一行开始的表格 foreach ($data as $key => $value) { $i++; $objSheet->setCellValue("A".$i,($i-1)) ->setCellValue("B".$i,$value['username']) ->setCellValue("C".$i,$get_sex[$value['sex']]) ->setCellValue("D".$i,$value['companyname']) ->setCellValue("E".$i,$value['tel']) ->setCellValue("F".$i,$value['mobile']) ->setCellValue("G".$i,$value['email']) ->setCellValue("H".$i,$value['address']) ->setCellValue("I".$i,$value['zhiwei']) ->setCellValue("J".$i,$get_mudi[$value['cg_mudi']]) ->setCellValue("K".$i,$value['industry']) ->setCellValue("L".$i,$get_ex[$value['get_ex']]) ->setCellValue('M'.$i,date('Y-m-d H:i:s',$value['add_time'])); } //设置宽 $objSheet->getColumnDimension('A')->setWidth(8); $objSheet->getColumnDimension('B')->setWidth(15); $objSheet->getColumnDimension('C')->setWidth(10); $objSheet->getColumnDimension('D')->setWidth(30); $objSheet->getColumnDimension('E')->setWidth(15); $objSheet->getColumnDimension('F')->setWidth(15); $objSheet->getColumnDimension('G')->setWidth(25); $objSheet->getColumnDimension('H')->setWidth(25); $objSheet->getColumnDimension('I')->setWidth(20); $objSheet->getColumnDimension('J')->setWidth(25); $objSheet->getColumnDimension('K')->setWidth(25); $objSheet->getColumnDimension('L')->setWidth(25); $objSheet->getColumnDimension('M')->setWidth(25); $objWriter= PHPExcel_IOFactory::createWriter($PHPExcel,'Excel2007');//生成excel文件 $this->outPut($fileName.".xlsx","Excel2007"); $objWriter->save("php://output");//输出浏览器 } /** * 输出浏览器 * @param $filename 文件名 * @param $type 文件类型 * @author wusn < message@jswusn.com > */ private function outPut($filename,$type){ if($type=="Excel5"){ header('Content-Type: application/vnd.ms-excel');//excel03文件 }else{ header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//excel07文件 } header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//excel07文件 header('Content-Disposition: attachment;filename="'.$filename.'"');//输出文件的名称 header('Cache-Control: max-age=0');//禁止缓存 }
{/pboot:pre}
代码效果:
以下从网上找的,很有用,都经过本人亲测的!拿下来做为自己收藏
PHPExcel是国外人开发的一个php处理excel插件了,这个插件没有中文的说明了,只有英文说明了,今天我们就一起来看看关于PHPExcel中文使用手册的例子,具体的如下所示。
HPExcel是用来操作Office Excel文档的一个PHP类库,它基于微软的Openxml标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。整体来说是一个不错的Excel操作类。
下面是这个类的一些操作说明。
{pboot:pre}
include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的 创建一个excel $objPHPExcel = new PHPExcel(); // 输出Excel表格到浏览器下载 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="abc.xls"'); 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 = new PHPExcel_Writer_Excel5($objPHPExcel); $objWriter->save('php://output'); ——————————————————————————————————————– 设置excel的属性: 创建人 $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); 最后修改人 $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw"); 标题 $objPHPExcel->getProperties()->settitle("Office 2007 XLSX Test Document"); 题目 $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document"); 描述 $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes."); 关键字 $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php"); 种类 $objPHPExcel->getProperties()->setCategory("Test result file"); ——————————————————————————————————————– 设置当前的sheet $objPHPExcel->setActiveSheetIndex(0); 设置sheet的name $objPHPExcel->getActiveSheet()->settitle('Simple'); 设置单元格的值 $objPHPExcel->getActiveSheet()->setCellValue('A1', 'String'); $objPHPExcel->getActiveSheet()->setCellValue('A2', 12); $objPHPExcel->getActiveSheet()->setCellValue('A3', true); $objPHPExcel->getActiveSheet()->setCellValue('C5', '=SUM(C2:C4)'); $objPHPExcel->getActiveSheet()->setCellValue('B8', '=MIN(B2:C5)'); 合并单元格 $objPHPExcel->getActiveSheet()->mergeCells('A18:E22'); 分离单元格 $objPHPExcel->getActiveSheet()->unmergeCells('A28:B28'); 冻结窗口 $objPHPExcel->getActiveSheet()->freezePane('A2'); 保护cell $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection! $objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel'); 设置格式 // Set cell number formats echo date('H:i:s') . " Set cell number formats "; $objPHPExcel->getActiveSheet()->getstyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE); $objPHPExcel->getActiveSheet()->duplicatestyle( $objPHPExcel->getActiveSheet()->getstyle('E4'), 'E5:E13' ); 设置宽width // Set column widths $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12); // 设置单元格高度 // 所有单元格默认高度 $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15); // 第一行的默认高度 $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30); 设置font $objPHPExcel->getActiveSheet()->getstyle('B1')->getFont()->setName('Candara'); $objPHPExcel->getActiveSheet()->getstyle('B1')->getFont()->setSize(20); $objPHPExcel->getActiveSheet()->getstyle('B1')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getstyle('B1')->getFont()->setUnderline(PHPExcel_style_Font::UNDERLINE_SINGLE); $objPHPExcel->getActiveSheet()->getstyle('B1')->getFont()->getColor()->setARGB(PHPExcel_style_Color::COLOR_WHITE); $objPHPExcel->getActiveSheet()->getstyle('E1')->getFont()->getColor()->setARGB(PHPExcel_style_Color::COLOR_WHITE); $objPHPExcel->getActiveSheet()->getstyle('D13')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getstyle('E13')->getFont()->setBold(true); 设置align $objPHPExcel->getActiveSheet()->getstyle('D11')->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getstyle('D12')->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getstyle('D13')->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_RIGHT); $objPHPExcel->getActiveSheet()->getstyle('A18')->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_JUSTIFY); //垂直居中 $objPHPExcel->getActiveSheet()->getstyle('A18')->getAlignment()->setVertical(PHPExcel_style_Alignment::VERTICAL_CENTER); 设置column的border $objPHPExcel->getActiveSheet()->getstyle('A4')->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getstyle('B4')->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getstyle('C4')->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getstyle('D4')->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN); $objPHPExcel->getActiveSheet()->getstyle('E4')->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN); 设置border的color $objPHPExcel->getActiveSheet()->getstyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getstyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getstyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getstyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getstyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300'); $objPHPExcel->getActiveSheet()->getstyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300'); 设置填充颜色 $objPHPExcel->getActiveSheet()->getstyle('A1')->getFill()->setFillType(PHPExcel_style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getstyle('A1')->getFill()->getStartColor()->setARGB('FF808080'); $objPHPExcel->getActiveSheet()->getstyle('B1')->getFill()->setFillType(PHPExcel_style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getstyle('B1')->getFill()->getStartColor()->setARGB('FF808080'); 加图片 /*实例化插入图片类*/ $objDrawing = new PHPExcel_Worksheet_Drawing(); /*设置图片路径 切记:只能是本地图片*/ $objDrawing->setPath($img_val); /*设置图片高度*/ $objDrawing->setWidth(200); $img_height[] = $objDrawing->getHeight(); /*设置图片要插入的单元格*/ $objDrawing->setCoordinates($img_k[$j].$i); /*设置图片所在单元格的格式*/ $objDrawing->setOffsetX(10); $objDrawing->setOffsetY(10); $objDrawing->setRotation(0); $objDrawing->getShadow()->setVisible(true); $objDrawing->getShadow()->setDirection(50); $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); 导出Excel表格例子 <?php $datas = array( array('王城', '男', '18', '1997-03-13', '18948348924'), array('李飞虹', '男', '21', '1994-06-13', '159481838924'), array('王芸', '女', '18', '1997-03-13', '18648313924'), array('郭瑞', '男', '17', '1998-04-13', '15543248924'), array('李晓霞', '女', '19', '1996-06-13', '18748348924'), ); include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的 // 创建一个excel $objPHPExcel = new PHPExcel(); // Set document properties $objPHPExcel->getProperties()->setCreator("Phpmarker")->setLastModifiedBy("Phpmarker")->settitle("Phpmarker")->setSubject("Phpmarker")->setDescription("Phpmarker")->setKeywords("Phpmarker")->setCategory("Phpmarker"); $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '名字')->setCellValue('B1', '性别')->setCellValue('C1', '年龄')->setCellValue('D1', '出生日期')->setCellValue('E1', '电话号码'); // Rename worksheet $objPHPExcel->getActiveSheet()->settitle('Phpmarker-' . date('Y-m-d')); // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15); $objPHPExcel->getActiveSheet()->freezePane('A2'); $i = 2; foreach($datas as $data){ $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $data[0])->getstyle('A'.$i)->getAlignment()->setHorizontal(PHPExcel_style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $data[1]); $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $data[2]); $objPHPExcel->getActiveSheet()->setCellValueExplicit('D'. $i, $data[3],PHPExcel_Cell_DataType::TYPE_STRING); $objPHPExcel->getActiveSheet()->getstyle('D' . $i)->getNumberFormat()->setFormatCode("@"); // 设置文本格式 $objPHPExcel->getActiveSheet()->setCellValueExplicit('E'. $i, $data[4],PHPExcel_Cell_DataType::TYPE_STRING); $objPHPExcel->getActiveSheet()->getstyle('E' . $i)->getAlignment()->setWrapText(true); $i ; } $objActSheet = $objPHPExcel->getActiveSheet(); // 设置CELL填充颜色 $cell_fill = array( 'A1', 'B1', 'C1', 'D1', 'E1', ); foreach($cell_fill as $cell_fill_val){ $cellstyle = $objActSheet->getstyle($cell_fill_val); // background // $cellstyle->getFill()->setFillType(PHPExcel_style_Fill::FILL_SOLID)->getStartColor()->setARGB('fafa00'); // set align $cellstyle->getAlignment()->setHorizontal(PHPExcel_style_Alignment::HORIZONTAL_LEFT)->setVertical(PHPExcel_style_Alignment::VERTICAL_CENTER); // font $cellstyle->getFont()->setSize(12)->setBold(true); // border $cellstyle->getBorders()->getTop()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000'); $cellstyle->getBorders()->getBottom()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000'); $cellstyle->getBorders()->getLeft()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000'); $cellstyle->getBorders()->getRight()->setBorderstyle(PHPExcel_style_Border::BORDER_THIN)->getColor()->setARGB('FFFF0000'); } $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30); $objActSheet->getColumnDimension('A')->setWidth(18.5); $objActSheet->getColumnDimension('B')->setWidth(23.5); $objActSheet->getColumnDimension('C')->setWidth(12); $objActSheet->getColumnDimension('D')->setWidth(12); $objActSheet->getColumnDimension('E')->setWidth(12); $filename = '2015030423'; ob_end_clean();//清除缓冲区,避免乱码 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$filename.'.xls"'); 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 = new PHPExcel_Writer_Excel5($objPHPExcel); $objWriter->save('php://output'); ————————————————
{/pboot:pre}
到处中文时,会出现乱码,记得在Header 之前加 ob_end_clean() 清除缓冲区,避免乱码