• PHP导出EXCEL


    用phpexcel类导出excel,由于之前直接通过header导出下载excel,本地打开之后一直是乱码,但是如果直接保存在服务器上打开不是乱码,没办法最后只有先保存到服务器上,然后下载完再删除。

    附上代码

      1 <?php
      2 require_once 'PHPExcel.php';
      3 require_once 'PHPExcel/Writer/Excel5.php';    // 用于其他低版本xls
      4 require_once 'PHPExcel/Writer/Excel2007.php'; //用于 excel-2007 格式 
      5 header("Content-type: text/html; charset=utf-8");
      6 
      7 $objExcel = new PHPExcel();  // 创建一个处理对象实例
      8 $objWriter = new PHPExcel_Writer_Excel2007($objExcel);// 用于 2007 格式  
      9 //$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用于其他版本格式
     10 
     11 //*************************************
     12 //设置文档基本属性
     13 //$objProps = $objExcel->getProperties();
     14 //$objProps->setCreator("Zeal Li");
     15 //$objProps->setLastModifiedBy("Zeal Li");
     16 //$objProps->setTitle("Office XLS Test Document");
     17 //$objProps->setSubject("Office XLS Test Document, Demo");
     18 //$objProps->setDescription("Test document, generated by PHPExcel.");
     19 //$objProps->setKeywords("office excel PHPExcel");
     20 //$objProps->setCategory("Test");
     21 
     22 //*************************************
     23 //设置当前的sheet索引,用于后续的内容操作。
     24 //一般只有在使用多个sheet的时候才需要显示调用。
     25 //缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
     26 
     27 $objExcel->setActiveSheetIndex(0);
     28 $objActSheet = $objExcel->getActiveSheet();
     29 
     30 //设置当前活动sheet的名称
     31 $objActSheet->setTitle('测试Sheet');
     32 
     33 //设置单元格内容
     34 //
     35 //由PHPExcel根据传入内容自动判断单元格内容类型
     36 $objActSheet->setCellValue('A1', '字符串内容');  // 字符串内容
     37 $objActSheet->setCellValue('A2', 26);            // 数值
     38 $objActSheet->setCellValue('A3', true);          // 布尔值
     39 $objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 公式
     40 
     41 
     42 //显式指定内容类型
     43 $objActSheet->setCellValueExplicit('A5', '847475847857487584',
     44         PHPExcel_Cell_DataType::TYPE_STRING);
     45 
     46 //合并单元格
     47 // $objActSheet->mergeCells('B1:C22');
     48 
     49 //分离单元格
     50 // $objActSheet->unmergeCells('B1:C22');
     51 
     52 //*************************************
     53 //设置单元格样式
     54 //
     55 
     56 //设置宽度
     57 // $objActSheet->getColumnDimension('B')->setAutoSize(true);
     58 // $objActSheet->getColumnDimension('A')->setWidth(30);
     59 
     60 // $objStyleA5 = $objActSheet->getStyle('A5');
     61 
     62 //设置单元格内容的数字格式。
     63 //
     64 //如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,
     65 //这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的
     66 //各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode
     67 //为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要
     68 //修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,
     69 //在 if ($this->_BIFF_version == 0x0500) { (第363行附近)前面增加一
     70 //行代码:
     71 //if($ifmt === '0') $ifmt = 1;
     72 //
     73 //设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字
     74 //被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容
     75 //都按原始内容全部显示出来。
     76 // $objStyleA5
     77 // ->getNumberFormat()
     78 // ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
     79 
     80 //设置字体
     81 // $objFontA5 = $objStyleA5->getFont();
     82 // $objFontA5->setName('Courier New');
     83 // $objFontA5->setSize(10);
     84 // $objFontA5->setBold(true);
     85 // $objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
     86 // $objFontA5->getColor()->setARGB('FF999999');
     87 
     88 //手动设置自动换行
     89 //$objActSheet->getStyle('D1:D2000')->getAlignment()->setWrapText(TRUE);
     90 //手动设置水平居中
     91 //$objActSheet->getStyle('A1:AE')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
     92 //手动设置垂直居中
     93 //$objActSheet->getStyle('A1:A2000')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
     94 
     95 
     96 //设置边框
     97 // $objBorderA5 = $objStyleA5->getBorders();
     98 // $objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
     99 // $objBorderA5->getTop()->getColor()->setARGB('FFFF0000'); // color
    100 // $objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    101 // $objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    102 // $objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    103 
    104 //设置填充颜色
    105 // $objFillA5 = $objStyleA5->getFill();
    106 // $objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    107 // $objFillA5->getStartColor()->setARGB('FFEEEEEE');
    108 
    109 //从指定的单元格复制样式信息.
    110 // $objActSheet->duplicateStyle($objStyleA5, 'B1:C22');
    111 
    112 
    113 //*************************************
    114 //添加图片
    115 // $objDrawing = new PHPExcel_Worksheet_Drawing();
    116 // $objDrawing->setName('ZealImg');
    117 // $objDrawing->setDescription('Image inserted by Zeal');
    118 // $objDrawing->setPath('./zeali.net.logo.gif');
    119 // $objDrawing->setHeight(36);
    120 // $objDrawing->setCoordinates('C23');
    121 // $objDrawing->setOffsetX(10);
    122 // $objDrawing->setRotation(15);
    123 // $objDrawing->getShadow()->setVisible(true);
    124 // $objDrawing->getShadow()->setDirection(36);
    125 // $objDrawing->setWorksheet($objActSheet);
    126 
    127 
    128 //添加一个新的worksheet
    129 $objExcel->createSheet();
    130 $objExcel->getSheet(1)->setTitle('测试2');
    131 
    132 //保护单元格
    133 // $objExcel->getSheet(1)->getProtection()->setSheet(true);
    134 // $objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');
    135 
    136 
    137 //*************************************
    138 //输出内容
    139 //
    140 //定义一个列名数组
    141 $arr=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
    142         'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV',
    143         'AW','AX','AY','AZ');
    144 //设置第一行的字体样式
    145 for($i=0;$i<(count($rs[0])/2);$i++){
    146     $objActSheet->getStyle($arr[$i].'1')->getFont()->setBold(true); //设置粗体
    147     $objActSheet->getStyle($arr[$i].'1')->getFont()->setSize(12); //设置大小
    148 }
    149 //$rs为数据库查询出来的结果
    150 //开始输出excel内容,从第二行开始,把整个excel输出
    151 foreach ($rs as $key=>$v){
    152 for ($i=0;$i<(count($rs[0])/2);$i++){
    153     $objActSheet->setCellValue($arr[$i].($key+2),$v[$i]);
    154     }
    155 }
    156 
    157 
    158 
    159 //*************************************
    160 
    161 
    162 $filename = "tttt.xlsx";
    163 $objWriter->save($filename);  //保存到服务器
    164 
    165 ob_end_clean();//清除缓冲区,避免乱码
    166 $filename=iconv('utf-8', 'gbk', $filename);
    167 $filesize = filesize($filename);
    168 header( "Content-Type: application/force-download;charset=utf-8");
    169 header( "Content-Disposition: attachment; filename= ".$filename);
    170 header( "Content-Length: ".$filesize);
    171 ob_clean();
    172 readfile($filename);
    173 
    174 unlink($filename); //下载完成后删除服务器文件
    175 ?>
  • 相关阅读:
    web http协议
    swoole udp
    swoole线程和进程
    SVN中trunk,branches,tags用法详解
    mysql外键使用和事物使用
    xml
    dedecms开启报错
    Django CBV方法装饰器
    Django Cookie和Session
    ORM基础5
  • 原文地址:https://www.cnblogs.com/blueskycc/p/4381528.html
Copyright © 2020-2023  润新知