今天小编讲讲使用PHPExcel类的最基本也是最重要的操作,去处理excel表格。
可以使用 给特哈普 下载 ,地址:https://github.com/PHPOffice/PHPExcel
也可用 composer 拉取,命令:composer require phpoffice/phpexcel
其中我们只需要:classes 目录里面的 PHPExcel 和 PHPExcel.php 就可以使用了 ;
$dir = dirname(__FILE__); //找到当前的脚本所在路径。
require_once $dir.'./Excel/PHPExcel.php'; //引入文件
$objPHPExcel = new PHPExcel(); //实例化PHPExcel类 等同于在桌面上新建了一个 Excel 表格。
$objSheet = $objPHPExcel->getActiveSheet(); //这里的 Active 指的是你正在工作的 sheet 页。
//写数据有俩种方法
//方法1
$objSheet->setCellValue('A1','姓名')->setCellValue('B1','分数'); // 可以使用链式的方式添加数据
//方法2
$arr = [
['',''],
['姓名','分数'],
['李四','60'],
['王五','61'],
];
$objSheet->fromArray($arr); //用起来方便,但性能消耗大。
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007'); //按照指定格式生成excel文件
//Excel2007 -> xlsx
//Excel5 -> xls
$objWrite->save($dir.'./test.xlsx'); //保存写好的文件
header('Content-Type:text/html;charset=utf-8');
$dir = dirname(__FILE__);
require $dir.'/Excel/PHPExcel/IOFactory.php';
$filename = $dir.'/dome.xlsx';
//加载文件方法有俩种方法
//方法 1
$objPHPExecl = PHPExcel_IOFactory::load($filename); //一句话简单粗暴,
//但是他会把你文件里的所有 sheet 全部加载出来,性能消耗大。
//方法 2
$fileType = PHPExcel_IOFactory::identify($filename);//返回文件类型
$objReader = PHPExcel_IOFactory::createReader($fileType);//获得文件读取对象
$sheetName = 'hello'; // 只加载 sheet 名是hello 的,想加载多个指定 sheet 这里可使用数组
$objReader->setLoadSheetsOnly($sheetName);
$objPHPExecl = $objReader->load($filename); //只加载指定的sheet
//读文件方法也有俩种
// 方法 1
$sheetConut = $objPHPExecl->getSheetCount(); //获得 sheet 总数
for($i=0;$i<$sheetConut;$i++){
$data = $objPHPExecl->getSheet($i)->toArray(); //读取每个sheet
var_dump($data);
}
// 也是简单粗暴,性能消耗大,文件大时会卡死。
//方法 2
foreach($objPHPExecl->getWorksheetIterator() as $sheet){//循环取sheet
foreach($sheet->getRowIterator() as $row){
foreach($row->getCellIterator() as $cell){
$data = $cell->getValue();
echo($data);
}
}
}
// 这里使用了 $objPHPExecl 内部的迭代器,性能得到了优化
//这里的 加载方式和读取文件方式 读是二选其一便可
$objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');//按照指定格式生成excel文件
browserExport('Execl2007','test.xlsx');//输出到浏览器
$objWrite->save('php://output');
//封装了一个输出到浏览器的方法
function browserExport($type,$filename){
if ($type == 'Excel5'){
header('Content-Type: application/vnd.ms-excel');//告诉浏览器要输出 xls 文件
}else{
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//告诉浏览器要输出 xlsx 文件
}
header('Content-Disposition: attachment;filename='.$filename); //告诉浏览器要输出的文件名
header('Cache-Control: max-age=0'); //禁止缓存
}