php excel的使用
Posted vermouthmo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php excel的使用相关的知识,希望对你有一定的参考价值。
1. 引入类
use phpExcel;
use PHPExcel_IOFactory;
use PHPExcel_Reader_Excel5;
use PHPExcel_Reader_Excel2007;
use PHPExcel_RichText;
2导入
/**
* PHPexcel导入
*/
public function getexcel($filename,$exts="xls")
{
// = ‘./uploads/a.xls‘;
// = ‘xls‘;
//如果excel文件后缀名为.xls,导入这个类
if ($exts == ‘xls‘) {
$PHPReader = new PHPExcel_Reader_Excel5();
} else if ($exts == ‘xlsx‘) {
$PHPReader = new PHPExcel_Reader_Excel2007();
}
//定义个数组接收数据
$dr_data = array();
//载入文件
$PHPExcel = $PHPReader->load($filename);
//获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$currentSheet = $PHPExcel->getSheet(0);
//获取总列数
$allColumn = $currentSheet->getHighestColumn();
//获取总行数
$allRow = $currentSheet->getHighestRow();
//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
//从哪列开始,A表示第一列
for ($currentColumn = ‘A‘; $currentColumn <= $allColumn; $currentColumn++) {
//数据坐标
$address = $currentColumn . $currentRow;// A1
//读取到的数据,保存到数组$arr中
$cell = $currentSheet->getCell($address)->getValue();
// instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例
if ($cell instanceof PHPExcel_RichText) {
$cell = $cell->__toString();
}
//print_r($cell);
$dr_data[$currentRow][$currentColumn] = $cell; //数据赋值
}
}
return $dr_data;
}
}
3.导出
class Excel extends Controller
{
public function index()
{
$fileName = ‘名册‘;
$headArr = [‘姓名‘,‘性别‘,‘年龄‘];
$data = db(‘mingce‘)->field(‘names,sex,nian‘)->select();
$this->excelExport($fileName,$headArr,$data);
}
public function aa(){
if(request()->isPost()){
$file = request()->file(‘file‘);
$info = $file->validate([‘size‘=>1567800,‘ext‘=>‘xls‘])->move(ROOT_PATH . ‘public‘ . DS . ‘uploads‘);
$filse = ‘./uploads/‘.$info->getSaveName();
// echo $filse;
$res = $this->getexcel($filse);
$arr = [];
foreach($res as $key=>$val){
$arr[$key][‘names‘] = $val[‘A‘];
$arr[$key][‘sex‘] = $val[‘B‘];
$arr[$key][‘nian‘] = $val[‘C‘];
}
// var_dump($arr);
db(‘mingce‘)->insertAll($arr);
}
return $this->fetch();
}
/**
* excel表格导出
* @param string $fileName 文件名称
* @param array $headArr 表头名称
* @param array $data 要导出的数据
* @author static7
* */
public function excelExport($fileName,$headArr,$data)
{
// // 导出文件名称
// = ‘a‘;
// // 数据表头
// $headArr = [‘姓名‘, ‘性别‘,‘年龄‘];
// // 具体数据
// $data = [
// [‘张三‘, ‘男‘,‘11‘],
// [‘李四‘, ‘女‘,‘12‘]
// ];
$fileName .= "_" . date("Y_m_d", time()) . ".xls";
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties(); // 设置Excel的属性;
// 设置表头
$key = ord("A");//65
foreach ($headArr as $v) {
$colum = chr($key);//‘A‘
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . ‘1‘, $v);
// $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . ‘1‘, $v);
$key += 1;
}
// 设置表头end
// 循环显示数据
$column = 2;
$objActSheet = $objPHPExcel->getActiveSheet();
foreach ($data as $key => $rows) { // 行写入
$span = ord("A");
foreach ($rows as $keyName => $value) { // 列写入
$objActSheet->setCellValue(chr($span) . $column, $value);
$span++;
}
$column++;
}
// 循环显示数据end
$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
$objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
ob_end_clean(); // 清空(擦除)缓冲区并关闭输出缓冲
ob_start(); // 打开输出控制缓冲
header(‘Content-Type: application/vnd.ms-excel‘);
header("Content-Disposition: attachment;filename=$fileName");
header(‘Cache-Control: max-age=0‘);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5‘);
$objWriter->save(‘php://output‘); // 文件通过浏览器下载
exit();
}
以上是关于php excel的使用的主要内容,如果未能解决你的问题,请参考以下文章