您的位置:首页 > 编程语言 > PHP开发

用PHPExcel导出的个人总结

2017-04-04 16:36 302 查看
再使用PHPExcel过程当中遇到过几个问题,总结一下,以备查询.
有时候导出会有打不开的问题,总结了下,可以尝试这样解决:


1.报warning,在第一行加了这行代码:

error_reporting(0);

这行代码的作用就是把warning,error等等的信息不显示出来。

最后执行,导出来的excel文件就可以顺利打开了。

2.有时候打不开,是后缀名的xlsx和xls的不同.试试把下载下来的文件后缀名为xlsx改为xls就能打开,看看具体报什么错!!

有时候打开是乱码总结如下:

1.有人说是Bom头的问题,不过我暂时还没有遇到.但是也是其中之一的影响因素.

2.phpexcel导出来的是乱码,是因为导出的时候字符集的问题,没有设置好,看看导出时的代码以及整个文档的编码!!最好导出的时候是utf-8的格式.其他的格式没有深入研究!

导出来的Excel是空白的:

1.空白的话 只能是数据没有放正确!!!逐步打印看看数据的正确性!

2.我的代码里面是按照下标索引的方式去填入数据表,所以如果最后的数组格式不一致,一样会导致导出的表是空白!
特别是在TP框架下面最重要的一点,在使用PHPExcel的时候,所有的实例化前面要加\,否则会报错,找不到类啊等等.

导出的时候提示Class 'XMLWriter' not found,解决方法是:

$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');

改为

$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5')

下面是我的代码,mark一下.

if(!empty($_POST['out']))
{
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');

/** Include PHPExcel */
require_once dirname(__FILE__) . '/PHPExcel.php';//不同的地方,请写入不同的路径

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();//初始化主类.

// Set document properties 设置属性
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");

// Miscellaneous glyphs, UTF-8
//将要获取目标表数据,这个地方我用的是TP框架,所以这样写,不同的框架,有不同拿到数据的方法,请根据自己情况自定义
$list = $User->where('sell=1')->field('giftpic,id,giftname,des,credit,number,sell,addtime')->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();

foreach($list as $a=>$b){
$lamp[] = array_values($b);//把关联数组的下表,换成索引,方便后面的调用
}

// 获取目标表的所有字段
$fields = $User->getDbFields();
foreach($fields as $f=>$d){
$ff[][] = $d;
}
//自己写的excel列名,如果超过26个,超过52个,78个的不同情况,给不同的列名.可以自己再加.
$s = 'abcdefghijklmnopqrstuvwxyz';
$aa = str_split($s,1);
$b=array();
for($i=0;$i<count($ff);$i++){
if($i<26){
$b[$aa[$i]]=$i;
}else if($i<52){
$m='A';
$b[$m.$aa[$i-26]]=$i;
}else if($i<78){
$m='B';
$b[$m.$aa[$i-52]]=$i;
}
}

//这个地方,我是自定义的表头,就是导出之后的Excel的第一行,根据自己需要自定义.
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('a1','图片');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('b1','ID');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('c1','名称');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('d1','余额');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('e1','积分');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('f1','库存数');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('g1','兑换数');
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('h1','添加时间');
foreach($lamp as $i=>$v)
{
foreach($b as $kk => $vv)
{
mb_convert_encoding($v[$vv], "UTF-8");
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($kk.($i+2),$v[$vv]);//把数据写入进去Excel
}
}

// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('vip');//自定义工作表的名称,可自定义.

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

ob_end_clean();//清除缓冲区的内容,以防导出的内容乱码,不能打开等问题,加上最好.
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Content-Type: application/vnd.ms-excel;charset=gb2312');//自定义的字符集
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 = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');//导出的方法实例化

4000
$objWriter->save('php://output');//导出
exit;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php PHPExcel