<?php /** * 简单实用Execl */ set_include_path('.'.get_include_path().PATH_SEPARATOR.dirname(__FILE__).'/PHPExecl/'); /* @func 引入类 */ require 'PHPExcel.php'; //模拟数据 $mulit_arr = array( array('标题1', '标题2', '标题3'), array('a', 'b', 'c'), array('d', 'e', 'f') ); /* @实例化 */ $obpe = new PHPExcel(); /* @func 设置文档基本属性 */ $obpe_pro = $obpe->getProperties(); $obpe_pro->setCreator('midoks')//设置创建者 ->setLastModifiedBy('2013/2/16 15:00')//设置时间 ->setTitle('data')//设置标题 ->setSubject('beizhu')//设置备注 ->setDescription('miaoshu')//设置描述 ->setKeywords('keyword')//设置关键字 | 标记 ->setCategory('catagory');//设置类别 /* 设置宽度 */ //$obpe->getActiveSheet()->getColumnDimension()->setAutoSize(true); //$obpe->getActiveSheet()->getColumnDimension('B')->setWidth(10); //设置当前sheet索引,用于后续的内容操作 //一般用在对个Sheet的时候才需要显示调用 //缺省情况下,PHPExcel会自动创建第一个SHEET被设置SheetIndex=0 //设置SHEET $obpe->setactivesheetindex(0); //写入多行数据 foreach($mulit_arr as $k=>$v){ $k = $k+1; /* @func 设置列 */ $obpe->getactivesheet()->setcellvalue('A'.$k, $v[0]); $obpe->getactivesheet()->setcellvalue('B'.$k, $v[1]); $obpe->getactivesheet()->setcellvalue('C'.$k, $v[2]); } //创建一个新的工作空间(sheet) $obpe->createSheet(); $obpe->setactivesheetindex(1); //写入多行数据 foreach($mulit_arr as $k=>$v){ $k = $k+1; /* @func 设置列 */ $obpe->getactivesheet()->setcellvalue('A'.$k, $v[0]); $obpe->getactivesheet()->setcellvalue('B'.$k, $v[1]); $obpe->getactivesheet()->setcellvalue('C'.$k, $v[2]); } //写入类容 $obwrite = PHPExcel_IOFactory::createWriter($obpe, 'Excel5'); //ob_end_clean(); //保存文件 $obwrite->save('mulit_sheet.xls'); //or 以下方式 /******************************************* 直接在浏览器输出 *******************************************/ /** header('Pragma: public'); header('Expires: 0'); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Content-Type:application/force-download'); header('Content-Type:application/vnd.ms-execl'); header('Content-Type:application/octet-stream'); header('Content-Type:application/download'); header("Content-Disposition:attachment;filename='mulit_sheet.xls'"); header('Content-Transfer-Encoding:binary'); $obwrite->save('php://output'); ?> */ ?>
解决 PHPExcel 长数字串显示为科学计数
在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号。
使用PHPExcel来生成excel,也会遇到同样的问题,解决方法有三种:
1、设置单元格为文本
$objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setTitle('Simple'); //设置A3单元格为文本 $objPHPExcel->getActiveSheet()->getStyle('A3')->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); //也可以设置整行或整列的style /* //E 列为文本 $objPHPExcel->getActiveSheet()->getStyle('E')->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); //第三行为文本 $objPHPExcel->getActiveSheet()->getStyle('3')->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); */
更多的格式可以在PHPExcel/Style/NumberFormat.php中找到。注意:上述的设置对长数字字符串还是以文本方式来显示科学计数法的结果,原因可能php在处理大数字时采用的科学计数法。
2、在设置值的时候显示的指定数据类型
$objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setTitle('Simple'); $objPHPExcel->getActiveSheet()->setCellValueExplicit('D1',123456789033,PHPExcel_Cell_DataType::TYPE_STRING);
3、在数字字符串前加一个空格使之成为字符串
$objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setTitle('Simple'); $objPHPExcel->getActiveSheet()->setCellValue('D1', ' ' . 123456789033);