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);
}
}