PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。整体来说是一个不错的Excel操作类。
首先利用该类我们可以实现两个功能
1、将Excel里面的数据进行读取,导进MySQL
2、我们把统计的数据信息导出到Excel表格 实现数据的统计
第一步 我们先下载PHPExcel类库 下载地址
链接地址https://github.com/PHPOffice/PHPExcel
链接地址https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8
因为当时我用的是YII1.1框架,我直接把PHPExcel类放在类文件里面,然后在配置文件进行引入,之后可以直接引用
1.将Excel数据提取出来,插入MySQL入库操作
//导出Excel到数据库
public function actionExport()
{
$dir = dirname(__FILE__); //找出当前脚本所在路径
//找出要导出的Excel文件
$inputFileName = $dir.'/../service/excel/data2.xlsx';
date_default_timezone_set('PRC');
// 读取excel文件
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
die('加载文件发生错误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}
// 确定要读取的sheet,什么是sheet,看excel的右下角,真的不懂去百度吧
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$tmp =[];
// 获取一行的数据
for ($row = 1; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//这里得到的rowData都是一行的数据,得到数据后自行处理,我们这里只打出来看看效果
// var_dump($rowData);
// echo "<br>";
$tmp[] = $rowData[0];
}
//打印Excel里面信息的数组
print_r($tmp);
}
2、将数据写入到Excel表格里面
//将数据倒进Excel比表格
public function actionExportinto($arr)
{
$dir = dirname(__FILE__); //找出当前脚本所在路径
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('PRC');
/** 引入PHPExcel */
require_once $dir.'/../service/excel/PHPExcel.php';
// 创建Excel文件对象
$objPHPExcel = new PHPExcel();
// 设置文档信息,这个文档信息windows系统可以右键文件属性查看
$objPHPExcel->getProperties()->setCreator("作者简庆旺")
->setLastModifiedBy("最后更改者")
->setTitle("文档标题")
->setSubject("文档主题")
->setDescription("文档的描述信息")
->setKeywords("设置文档关键词")
->setCategory("设置文档的分类");
//根据excel坐标,添加数据
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '推荐人ID')
->setCellValue('B1', '推荐人昵称')
->setCellValue('C1', '直接推荐人数')
->setCellValue('D1', '参与推广率')
->setCellValue('E1', '任务完成率');
$key = 1;
/*以下就是对处理Excel里的数据,横着取数据*/
foreach($arr as $v){
//设置循环从第二行开始
$key++;
$objPHPExcel->getActiveSheet()
//Excel的第A列,name是你查出数组的键值字段,下面以此类推
->setCellValue('A'.$key, $v['openid'])
->setCellValue('B'.$key, $v['name'])
->setCellValue('C'.$key, $v['num'])
->setCellValue('D'.$key, $v['tg'])
->setCellValue('E'.$key, $v['wc']);
}
// 重命名工作sheet
$objPHPExcel->getActiveSheet()->setTitle('第二个sheet');
// 设置第一个sheet为工作的sheet
$objPHPExcel->setActiveSheetIndex(0);
// 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//数据存放位置
$objWriter->save($dir.'/../service/export5.xlsx');
// // 保存Excel 95格式文件,,保存路径为当前路径,
// $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
// $objWriter->save('export.xls');
}
因为我是写在Yii框架控制器里面的,各自一个方法,导进去Excel只需传数组就OK