class ReadExcel
{
/** 读取指定表格中的数据内容(默认读取第一张表的数据)
* @param $file 文件路径及名称
* @param int $path 文件中img存放路径(默认img转为base64编码)
* @param int $page 表格编号(默认第一张表)
* @param bool $trainst 数组组成方式 (默认false = $data[行号][列标记])true = $data[列标记][行号]
* @return array 判断文件是否错误或表格中的数据
*/
static function result($file,$path=0,$page = 0,$trainst = false){
$dataset = self::base($file,$PHPExcel);
if($dataset['code'] === 1) return $dataset;
$sheet = $PHPExcel->getSheet($page); // 读取第page+1個工作表
return $dataset = self::table_data($sheet,$path,$trainst);
}
/**读取表格中的数据
* @param $file 文件路径及名称
* @param int $path 文件中img存放路径(默认img转为base64编码)
* @param bool $trainst 数组组成方式 (默认false = $data[行号][列标记])true = $data[列标记][行号]
* @return array 判断文件是否错误或表格中的数据
*/
static function result_big_value($file,$path=0,$trainst = false){
$dataset = self::base($file,$PHPExcel);
if($dataset['code'] === 1) return $dataset;
$AllSheets = $PHPExcel->getAllSheets();
$i = 0;
$big_data['code'] = 0;
foreach ($AllSheets as $sheet){
$key = $sheet->getTitle();
$key = $key or $i;
$big_data[$key] = self::table_data($sheet,$path,$trainst);
$i++;
}
return $big_data;
}
/** 载入文件 及 生成解析表格的对象
* @param $file 文件路径及名称
* @param $PHPExcel 解析表格的对象
* @return array 文件是否有误
* @throws \PHPExcel_Reader_Exception
*/
private static function base($file,& $PHPExcel){
$f = fopen($file,'rb');
$bin = fread($f,2);
fclose($f);
$strinfo = @unpack("C2chars",$bin);
$typeCode = intval($strinfo['chars1'].$strinfo['chars2']);
require_once ('./Classes/PHPExcel.php');
require_once ('./Classes/PHPExcel/IOFactory.php');
try{
if($typeCode == 8075){
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
}elseif ($typeCode == 208207){
$reader = \PHPExcel_IOFactory::createReader('Excel5');//设置以Excel5格式(Excel97-2003工作簿)
}else{
return $dataset = array('code'=>1,'info'=>'文件类型错误');
}
$PHPExcel = $reader->load($file);
}catch (\PHPExcel_Reader_Exception $e){
return $dataset = array('code'=>1,'info'=>'文件类型错误');
}
return $dataset = array('code'=>0,'info'=>'文件类型正确');
}
/**
* @param $sheet
* @param int $path
* @param bool $trainst
* @return array
* @throws \PHPExcel_Exception
*/
private static function table_data($sheet,$path=0,$trainst = false){
try{
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumm = $sheet->getHighestColumn(); // 取得总列数
$lenght = 0;
for($i=0;$i<strlen($highestColumm);$i++){
$lenght += (ord($highestColumm[$i])-64);
}
/** 循环读取每个单元格的数据 */
if($trainst){
for ($row = 1; $row <= $highestRow; $row++){//行号从1开始
for ($i = 1,$column = 'A'; $i <= $lenght; $i++,$column++){//列数是以A列开始
$data[$column][$row] = $sheet->getCell($column.$row)->getValue();
}
}
}else{
for ($row = 1; $row <= $highestRow; $row++){//行号从1开始
for ($i = 1,$column = 'A'; $i <= $lenght; $i++,$column++){//列数是以A列开始
$data[$row][$column] = $sheet->getCell($column.$row)->getValue();
}
}
}
if($path){
if(!is_dir($path)){
mkdir($path,0777);
}
foreach ($sheet->getDrawingCollection() as $k => $drawing) {
list ($column, $row) = \PHPExcel_Cell::coordinateFromString($drawing->getCoordinates());//获取列与行号
if(substr($path,-1) == '/'){
$path = $path.$drawing->getHashCode().'_';
}else{
$path = $path.'/'.$drawing->getHashCode().'_';
}
// for xlsx
if ($drawing instanceof \PHPExcel_Worksheet_Drawing) {
$filename = $drawing->getPath();
$imageFileName = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
copy($filename, $path);
if($trainst){
$data[$column][$row] = '.'.substr($path,strlen(SITE_DIR));
}else{
$data[$row][$column] = '.'.substr($path,strlen(SITE_DIR));
}
}
}
}else{
foreach ($sheet->getDrawingCollection() as $k => $drawing) {
$path = './';
list ($column, $row) = \PHPExcel_Cell::coordinateFromString($drawing->getCoordinates());//获取列与行号
// for xlsx
if ($drawing instanceof \PHPExcel_Worksheet_Drawing) {
$filename = $drawing->getPath();
$imageFileName = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
copy($filename, $path);
$image_info = getimagesize($path);
$image_data = fread(fopen($path, 'r'), filesize($path));
$base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
unlink($path);
if($trainst){
$data[$column][$row] = $base64_image;
}else{
$data[$row][$column] = $base64_image;
}
}
}
}
}catch (\PHPExcel_Exception $e){
return $dataset = array('code'=>1,'info'=>'文件类型错误');
}
return $dataset = array('code'=>0,'data'=>$data,'sheet'=>$sheet);
}
}
PHP Excel读取
最新推荐文章于 2024-05-15 10:00:00 发布