thinkphp 框架用的不太多,也没怎么接触过PHPExcel,但是工作中需要用到PHPExcel 来进行导入数据 与导出数据。
于是就学习了下关于thinkphp与PHPExcel的整合。
百度,谷歌 上 资料很多 我也查了许多 ,然后 把我学到的知识分享下
可从官网上下载PHPExcel
http://phpexcel.codeplex.com/releases/view/119187
放在对应ThinkPHP里面 如下图 Vendor 是对应第三方资源库
可用vendor("PHPExcel.PHPExcel");加载第三方资源
vender,import为thinkphp的原生态函数
从上面代码可以看出
用vendor("PHPExcel.PHPExcel"); 调用时
$baseUrl = VENDOR_PATH; //这里已经定义了 ThinkPHP\Library\Vendor对应的路径
在import函数里面 会将PHPExcel.PHPExce = 》PHPExcel/PHPExce
最终引入的时候 会变成
require D:\192.168.0.73\BigAnt5x_WebSys\www_demo\ThinkPHP\Library\Vendor\PHPExcel/PHPExce.php;
如果我引入其他的一个文件 如下
那我引入的是时候 可以用
vendor("WxpayController#class"); //import函数的是 将 #换成了 .
也可以用
import("WxpayController#class,VENDOR_PATH);
说了 半天就讲了 导入PHPExcel 。。。。
接下来进入正题!!
先贴上代码
function sp_excle2array($file){
vendor("PHPExcel.PHPExcel");
vendor("PHPExcel.PHPExcel.IOFactory");
$objPHPExcel = PHPExcel_IOFactory::load($file);//用这个去解析一个对应excel文件
/**读取excel文件中的第一个工作表*/
$currentSheet = $objPHPExcel->getSheet(0);
/**取得最大的列号*/
$allColumn = $currentSheet->getHighestColumn();
/**取得一共有多少行*/
$allRow = $currentSheet->getHighestRow();
for ($currentRow = 1;$currentRow<=$allRow;$currentRow++){
for($currentColumn = "A";$currentColumn<=$allColumn;$currentColumn++){
$address = $currentColumn . $currentRow; // 数据坐标
$ExlDataUser[] = $currentSheet->getCell($address)->getValue();// 读取到的数据,保存到数组$arr中
//echo $currentSheet->getCell($address)->getValue() ."<br/>";
}
$ExlDataAll[] = $ExlDataUser;
unset($ExlDataUser);
}
return $ExlDataAll;
}
根据需要 可以从相应excel位置获取值
/**
* 数组 转 excel
* @param unknown $file
* @return mixed
*/
function sp_array2excel($data,$file = '',$filePreName = '')
{
if ($file == ''){
$d = getdate() ;
$file = $d[0] ;
if ($filePreName) $file = $filePreName . '_' . $file ;
}
//文件名
$outputFileName = $file .'.xls';
//文件路径
$file = './data/export/'. $file .'.xls' ;
//var_dump($file);var_dump($outputFileName);die();
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new PHPExcel();
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
/* 设置当前的sheet */
$objPHPExcel->setActiveSheetIndex(0);
$objActSheet = $objPHPExcel->getActiveSheet();
//设置自适应宽度
$N = 'A';
for ($M=0;$M<count($data[0]);$M++){
$objPHPExcel->getActiveSheet()->getColumnDimension($N)->setAutoSize(true);
$N++;
}
//填充数据
$i = 1;
foreach($data as $value)
{
/* excel文件内容 */
$j = 'A';
foreach($value as $value2)
{
// $value2=iconv("gbk","utf-8",$value2);
$objActSheet->setCellValue($j.$i,$value2);
$j++;
}
$i++;
}
//生成excel文件
ob_end_clean(); //清空缓存
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header('Content-Disposition:attachment;filename="'.$outputFileName.'"');
header("Content-Transfer-Encoding:binary");
//$objWriter->save(“”php://output“”);
$objWriter->save($file);
$file = str_replace("./", "/", $file);
return $file ;
}
根据数组生成一个excel文件(save($file)) 或者直接输出出来(save(“”php://output“”);)