当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » PHP  » 文件处理和文本解析
firmy

PHPEXCEL生成excel文件

firmy 发布于 2012年11月23日 18时, 10评/27326阅
分享到: 
收藏 +0
2
支持任意行列数据生成excel文件
标签: PHPExcel

代码片段(1) [全屏查看所有代码]

1. [代码][PHP]代码     跳至 [1] [全屏预览]

<?php
/**
 * PHPEXCEL生成excel文件
 * @author:firmy
 * @desc 支持任意行列数据生成excel文件,暂未添加单元格样式和对齐
 */

require_once 'library/PHPExcel.php';
require_once 'library/PHPExcel/Reader/Excel2007.php';
require_once 'library/PHPExcel/Reader/Excel5.php';
include_once 'library/PHPExcel/IOFactory.php';

$fileName = "test_excel";
$headArr = array("第一列","第二列","第三列");
$data = array(array(1,2),array(1,3),array(5,7));
getExcel($fileName,$headArr,$data);


function getExcel($fileName,$headArr,$data){
    if(empty($data) || !is_array($data)){
        die("data must be a array");
    }
    if(empty($fileName)){
        exit;
    }
    $date = date("Y_m_d",time());
    $fileName .= "_{$date}.xlsx";

    //创建新的PHPExcel对象
    $objPHPExcel = new PHPExcel();
    $objProps = $objPHPExcel->getProperties();
	
    //设置表头
    $key = ord("A");
    foreach($headArr as $v){
        $colum = chr($key);
        $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
        $key += 1;
    }
    
    $column = 2;
    $objActSheet = $objPHPExcel->getActiveSheet();
    foreach($data as $key => $rows){ //行写入
        $span = ord("A");
        foreach($rows as $keyName=>$value){// 列写入
            $j = chr($span);
            $objActSheet->setCellValue($j.$column, $value);
            $span++;
        }
        $column++;
    }

    $fileName = iconv("utf-8", "gb2312", $fileName);
    //重命名表
    $objPHPExcel->getActiveSheet()->setTitle('Simple');
    //设置活动单指数到第一个表,所以Excel打开这是第一个表
    $objPHPExcel->setActiveSheetIndex(0);
    //将输出重定向到一个客户端web浏览器(Excel2007)
          header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
          header("Content-Disposition: attachment; filename=\"$fileName\"");
          header('Cache-Control: max-age=0');
          $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
          if(!empty($_GET['excel'])){
            $objWriter->save('php://output'); //文件通过浏览器下载
        }else{
          $objWriter->save($fileName); //脚本方式运行,保存在当前目录
        }
  exit;

}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(10)

  • 1楼:docks 发表于 2013-04-25 17:30 回复此评论
     运行了一下,但生成的excel是一个空文件,发现 require_once包含的文件有问题,将Reader改为Writer 就好了,即
    require_once 'Classes/PHPExcel/Writer/Excel2007.php';
    require_once 'Classes/PHPExcel/Writer/Excel5.php'
  • 2楼:zhoumengkang 发表于 2013-12-20 23:31 回复此评论
    改成Writer也还是空文件,一直到var_dump($ objWriter )都有数据,不知道怎么保存的时候就出问题了.
  • 3楼:hongtiao 发表于 2014-01-07 16:50 回复此评论
    是啊    Writer 还是空文件。。。。
  • 4楼:hongtiao 发表于 2014-01-07 17:19 回复此评论
    Reader 改为  Writer
    $fileName .= "_{$date}.xlsx";  改为   $fileName .= "_{$date}.xls";
    if(!empty($_GET['excel'])){
                $objWriter->save('php://output'); //文件通过浏览器下载
            }else{
              $objWriter->save($fileName); //脚本方式运行,保存在当前目录
            }
    改为 
    $objWriter->save('php://output');
    貌似就行了。。。
  • 5楼:newnoder 发表于 2014-10-19 20:34 回复此评论

    引用来自“hongtiao”的评论

    Reader 改为  Writer
    $fileName .= "_{$date}.xlsx";  改为   $fileName .= "_{$date}.xls";
    if(!empty($_GET['excel'])){
                $objWriter->save('php://output'); //文件通过浏览器下载
            }else{
              $objWriter->save($fileName); //脚本方式运行,保存在当前目录
            }
    改为 
    $objWriter->save('php://output');
    貌似就行了。。。
    谢谢,但是乱码了
  • 6楼:blu10ph 发表于 2014-12-15 12:26 回复此评论
    列大于Z的话.....不会出问题吗?~
  • 7楼:blu10ph 发表于 2015-01-06 16:10 回复此评论
    function getExcelColumnValue($index) {
    	$array = range('A', 'Z');
    	$columnValue = '';
    	if ($index >= 26) {
    		$columnValue = getExcelColumnValue(intval($index / 26) - 1).$array[$index%26];
    	} else {
    		$columnValue = $array[$index] . $columnValue;
    	}
    	return $columnValue;
    }
  • 8楼:诡道 发表于 2015-06-17 17:26 回复此评论

    引用来自“blu10ph”的评论

    function getExcelColumnValue($index) {
    	$array = range('A', 'Z');
    	$columnValue = '';
    	if ($index >= 26) {
    		$columnValue = getExcelColumnValue(intval($index / 26) - 1).$array[$index%26];
    	} else {
    		$columnValue = $array[$index] . $columnValue;
    	}
    	return $columnValue;
    }
    学习了。
  • 9楼:cfanbo 发表于 2016-08-03 16:52 回复此评论
    //清除缓存
    ob_clean();


    在header输出前清除一下缓存
  • 10楼:JIUYOU 发表于 2016-12-12 17:56 回复此评论
    清除缓存还是乱码啊!我页面是gbk编码,数据也是gbk编码,在下面我也写了header("Content-Type: application/vnd.ms-excel; charset==UTF-8");怎么出来的excel文件还是有中文就乱码啊