1、在vendor下引入phpoffice文件,其中包括PHPExcel类
PHPExcel类下载地址:https://github.com/PHPOffice/PHPExcel
如图:
2、修改PHPExcel文件下的Autoloader.php
将register方法全部替换成如下:
public static function register()
{
// 修改后的方法
$functions = spl_autoload_functions();
foreach ( $functions as $function)
spl_autoload_unregister($function);
$functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);
foreach ( $functions as $function)
$x = spl_autoload_register($function);
return $x;
}
3、在入口文件index.php 中引入PHPExcel类
require(__DIR__ . '/../../vendor/phpoffice/PHPExcel.class.php');
4、因为是跨服务器上传,所以采用的是curl传送
具体方法见详情:https://mp.csdn.net/postedit/103956716
5、方法一:导入excel表格
$objPHPExcel = new PHPExcel();
$objPHPExcelReader = \PHPExcel_IOFactory::load($filePath);
$excel_array=$objPHPExcelReader->getsheet(0)->toArray(); //转换为数组格式,获取到表格中的所有数据
方法二:读取文件内容
//$filePath 是文件上传路径
$filePath = str_replace('\\','/',$filePath);
$handle = fopen($filePath,'r');
if(!$handle){
return '文件打开失败';
}
$i = 0;
$j = 0;
$line = 0;$offset = 0;
$arr = [];
while($data = fgetcsv($handle)){
//小于偏移量则不读取,但$i仍然需要自增
if($i < $offset && $offset){
$i++;
continue;
}
//大于读取行数则退出
if($i > $line && $line){
break;
}
foreach ($data as $key => $value) {
$content = iconv("gbk","utf-8//IGNORE",$value);//转化编码
$arr[$j][] = $content;
}
$i++;
$j++;
}
//$arr 是文件中所有数据
6、方法一:导出数据到excel表格
public function exportData()
{
$data = Yii::$app->db->createCommand("select name,sex,age from test limit 50")->queryAll(); //$data 是要操作的数据
$objectPHPExcel = new PHPExcel();
$objectPHPExcel->setActiveSheetIndex()->setCellValue('A1', '姓名');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('B1', '性别');
$objectPHPExcel->setActiveSheetIndex()->setCellValue('C1', '年龄');
$n = 2;
foreach ($data as $v){
$objectPHPExcel->getActiveSheet()->setCellValue('A'.($n) ,$v['name']);
$objectPHPExcel->getActiveSheet()->setCellValue('B'.($n) ,$v['sex']);
$objectPHPExcel->getActiveSheet()->setCellValue('C'.($n) ,$v['age']);
$n = $n +1;
}
ob_end_clean();
ob_start();
header('Content-Type : application/vnd.ms-excel');
//设置输出文件名及格式
header('Content-Disposition:attachment;filename="学生明细'.date("YmdHis").'.xls"');
//导出.xls格式的话使用Excel5,若是想导出.xlsx需要使用Excel2007
$objWriter= \PHPExcel_IOFactory::createWriter($objectPHPExcel,'Excel5');
$objWriter->save('php://output');
ob_end_flush();
//清空数据缓存
unset($data);
}
方法二: 写入文件
public function exportData()
{
$fp = fopen($exportUrl, 'w'); //$exportUrl为文件写入路径
//只有一列数据
$fp = fopen($res_path, 'w');
foreach ($row as $k => $v) {
fwrite($fp, $v);
if ($v != end($row)) {
fwrite($fp, "\r\n");
}
}
fclose($fp);
//一列以上数据
$headList = ['姓名','性别','年龄'];
//输出Excel列名信息
foreach ($headList as $key => $value) {
//CSV的Excel支持GBK编码,一定要转换,否则乱码
$headList[$key] = iconv('utf-8', 'gbk', $value);
}
//将数据通过fputcsv写到文件句柄
fputcsv($fp, $headList);
//计数器
$num = 0;
//每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;
//逐行取出数据,不浪费内存
$count = count($dataList);
for ($i = 0; $i < $count; $i++) {
$num++;
//刷新一下输出buffer,防止由于数据过多造成问题
if ($limit == $num) {
ob_flush();
flush();
$num = 0;
}
$row = $dataList[$i];
foreach ($row as $key => $value) {
$row[$key] = iconv('utf-8', 'gbk', $value);
}
fputcsv($fp, $row);
}
}