<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用公共文件
define('EXCEL_EXTENSION_2003', "xls");
define('EXCEL_EXTENSION_2007', "xlsx");
/**
* 处理Excel中图片
*
* @param string $file_name 文件名
* @param string $full_path 文件完整路径
*/
function process_excel_p_w_picpath($file_name, $full_path)
{
// 引入PHPEXCEL类
import('PHPExcel_IOFactory', EXTEND_PATH . "PhpExcel/PHPExcel/");
import('PHPExcel', EXTEND_PATH . "PhpExcel/");
// 判断文件版本,选择对应的解析文件
if(getExtendFileName($file_name) == EXCEL_EXTENSION_2003)
{
$reader = \PHPExcel_IOFactory::createReader('Excel5');
}
else if(getExtendFileName($file_name) == EXCEL_EXTENSION_2007)
{
$reader = new \PHPExcel_Reader_Excel2007();
}
// 解析Excel文件
// $objPHPExcel = $objReader->load(ROOT_PATH . "public/uploads/" . $file_path);
$PHPExcel = $reader->load($full_path);
$worksheet = $PHPExcel->getActiveSheet();
$p_w_picpathInfo = extractImageFromWorksheet($worksheet, ROOT_PATH . "public/uploads/school/");
return $p_w_picpathInfo;
}
/**
* 返回文件路径的信息
*
* @param string $file_name
* @return string
*/
function getExtendFileName($file_name) {
$extend = pathinfo($file_name);
$extend = strtolower($extend["extension"]);
return $extend;
}
/**
* worksheet中提取p_w_picpath
*
* @param object $worksheet
* @param string $basePath
*/
function extractImageFromWorksheet($worksheet,$basePath){
$result = array();
$p_w_picpathFileName = "";
foreach ($worksheet->getDrawingCollection() as $drawing) {
$xy=$drawing->getCoordinates();
$path = $basePath;
// for xlsx
if ($drawing instanceof \PHPExcel_Worksheet_Drawing) {
$filename = $drawing->getPath();
$p_w_picpathFileName = $drawing->getIndexedFilename();
// process p_w_picpathFileName
$tmp = explode(".", $p_w_picpathFileName);
$tmp[0] = md5(microtime(true));
$tmp_fileName = implode(".", $tmp);
// process p_w_picpathFileName
// $path = $path . $drawing->getIndexedFilename();
$path = $path . $tmp_fileName;
$boo = copy($filename, $path);
$result[$xy] = $path;
// for xls
} else if ($drawing instanceof \PHPExcel_Worksheet_MemoryDrawing) {
$p_w_picpath = $drawing->getImageResource();
$renderingFunction = $drawing->getRenderingFunction();
switch ($renderingFunction) {
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
$p_w_picpathFileName = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
p_w_picpathjpeg($p_w_picpath, $path);
break;
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
$p_w_picpathFileName = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
p_w_picpathgif($p_w_picpath, $path);
break;
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
$p_w_picpathFileName = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
p_w_picpathgif($p_w_picpath, $path);
break;
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
$p_w_picpathFileName = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
p_w_picpathgif($p_w_picpath, $path);
break;
}
$result[$xy] = $p_w_picpathFileName;
}
}
return $result;
}
控制器:
public function upload_p_w_picpath()
{
$params = input('param.');
if ($this->request->method() == "POST") {
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('excel');
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->validate([
'size'=>5242880,
'ext'=>'xls,xlsx,csv'
])->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info){
// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// $saveName = $info->getSaveName();
$file_path = $info->getSaveName();
$file_name = $info->getFileName();
// 引入PHPEXCEL类
import('PHPExcel_IOFactory', EXTEND_PATH . "PhpExcel/PHPExcel/");
import('PHPExcel', EXTEND_PATH . "PhpExcel/");
// 判断文件版本,选择对应的解析文件
if(getExtendFileName($file_name) == EXCEL_EXTENSION_2003)
{
$reader = \PHPExcel_IOFactory::createReader('Excel5');
}
else if(getExtendFileName($file_name) == EXCEL_EXTENSION_2007)
{
$reader = new \PHPExcel_Reader_Excel2007();
}
// 解析Excel文件
// $objPHPExcel = $objReader->load(ROOT_PATH . "public/uploads/" . $file_path);
$PHPExcel = $reader->load(ROOT_PATH . "public/uploads/" . $file_path);
$worksheet = $PHPExcel->getActiveSheet();
$p_w_picpathInfo = extractImageFromWorksheet($worksheet, ROOT_PATH . "public/uploads/20170902/");
var_dump($p_w_picpathInfo);
}else{
// 上传失败获取错误信息
return $this->error($file->getError());
}
} else {
return $this->fetch();
}
}
引入PHPEXCEL类库:
转载于:https://blog.51cto.com/laok8/1964539