php怎样打印excel图表,Tp5.0+PHPExcel.php实现excel打印数据表

本文详细介绍了如何在ThinkPHP5中扩展PHPEXcel类库,包括正确引入、合并单元格及处理编码问题,重点讲解了缓冲区管理以避免乱码。通过实例演示了导出数据和下载Excel文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.你的先下以一个类的扩展PHPEXcel.php

(https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8),这个时候放的位置可有讲究了,此处附图cdd51f2637126d4e1bc4d155be357b59.png

并参考Tp5在线手册中的关于扩展类部分(https://www.kancloud.cn/manual/thinkphp5/177200;这个引用第三方类库显示放在extends文件夹下面,然后利用usethink\Loader; 引入文件,

此时还没有完,你还需要手动引入里面的类文件

//手动引入PHPExcel.php

Loader::import('PHPExcel.Classes.PHPExcel');

//引入IOFactory.php 文件里面的PHPExcel_IOFactory这个类

Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');

$obj = new \PHPExcel();

这样PHPEXcel.php才会生效。(这只是第一步,也是关键一步)

2.进行数据表的导出

//导出数据

function exportExcel($title=array(), $data=array(), $fileName, $savePath, $isDown){

//手动引入PHPExcel.php

Loader::import('PHPExcel.Classes.PHPExcel');

//引入IOFactory.php 文件里面的PHPExcel_IOFactory这个类

Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');

$obj = new \PHPExcel();

//横向单元格标识

$cellName = 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', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

$obj->getActiveSheet(0)->setTitle('gaikuang_workpiece'); //设置sheet名称

$_row = 1; //设置纵向单元格标识

$_len=3; //设置横向单元格标识

if($title){

$_cnt = count($title);

$obj->getActiveSheet(0)->mergeCells('i'.$_row.':'.'k'.$_row); //合并单元格

$obj->setActiveSheetIndex(0)->setCellValue('i'.$_row, '数据导出:'.date('Y-m-d H:i:s')); //设置合并后的单元格内容

$_row++;

$i = 0;

//设置列标题开始的位置

foreach($title AS $v){

$obj->setActiveSheetIndex(0)->setCellValue($cellName[$i].$_row, $v);

$i++;

}

$_row++;

}

//填写数据

if($data){

$i = 0;

foreach($data AS $_v){

$j = 0;

foreach($_v AS $_cell){

$obj->getActiveSheet(0)->setCellValue($cellName[$j] . ($i+$_row), $_cell);

$j++;

}

$i++;

}

}

//文件名处理

if(!$fileName){

$fileName = uniqid(time(),true);

}

$objWrite = \PHPExcel_IOFactory::createWriter($obj, 'Excel2007');

if($isDown){ //网页下载

header('pragma:public');

ob_end_clean();//(这个地方及其要注意!!!!!)清除缓冲区,避免乱码

header('Content-Type: application/vnd.ms-excel');

header("Content-Disposition:attachment;filename=$fileName.xlsx");

$objWrite->save('php://output');exit;

}

$_fileName = iconv("utf-8", "gb2312", $fileName); //转码

$_savePath = $savePath.$_fileName.'.xlsx';

$objWrite->save($_savePath);

return $savePath.$fileName.'.xlsx';

}

function doimportExecl(){

$file=input('post.');

$this->importExecl($file);

}

3.话不多说,先解释一波:

3.1

$title:导出excel的标题

$data:要导出的数据(只可以是数组)

$fileName:文件名称

$savePath:包存路劲

$isDown:是否下载(建议在测试的时候选择true便于观测)

3.2关键代码都有注释就不解释了

3.3同上3.2不解释

3.4这里要注意的是缓冲区问题。这里处理不好的话个很容易出现编码混乱。

4.总结需要注意的地方:

一个是外部类库的引入,

另一个是缓冲区乱码问题,

第三个是如果需要合并单元格或者是改变excel格式(请看第3.2便可解决);

原文:https://www.cnblogs.com/mengor/p/8136365.html

加油!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值