PHPexcel导入 (带图片)
程序员文章站
2022-06-14 08:19:53
...
PHPexcel导入 (带图片)
平时使用的PHPexcel导入导出只有文字信息,这次遇到了一个有趣的带图片导入这里分享一下;
(需下载PHPExcel类文件,引入到项目类库里)
PHPExcel类库, 点这里下载 https://github.com/Zmwherein/PHPExcel.git
一,Excel文件导入数据库,带图片
<?php
//个人习惯定义一个新的输出方式
function dump($data){
echo '<pre>';
var_dump($data);
}
header("content-type:text/html;charset=utf8");
include './Classes/PHPExcel/IOFactory.php';//引入PHPExcel类
$inputFileName = './test.xlsx';//读取的excel文件
date_default_timezone_set('PRC');
// 读取excel文件
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
die('加载文件发生错误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}
$sheet = $objPHPExcel->getSheet(0);
$data=$sheet->toArray();//该方法读取不到图片 图片需单独处理
$imageFilePath='./images/'.date('Y-m-d').'/';//图片在本地存储的路径
if (! file_exists ( $imageFilePath ))
{
mkdir("$imageFilePath", 0777, true);
}
//处理图片
foreach($sheet->getDrawingCollection() as $img)
{
list($startColumn,$startRow)= PHPExcel_Cell::coordinateFromString($img->getCoordinates());//获取图片所在行和列
$imageFileName = $img->getCoordinates() . mt_rand(100, 999);
copy($img->getPath(),$imageFilePath.$imageFileName.'.'.$img->getExtension());
//插入代码
$startColumn = ABC2decimal($startColumn);//由于图片所在位置的列号为字母,转化为数字
$data[$startRow-1][$startColumn]=$imageFilePath.$imageFileName.'.'.$img->getExtension();//把图片插入到数组中
}
dump($data);die;
function ABC2decimal($abc)
{
$ten = 0;
$len = strlen($abc);
for($i=1;$i<=$len;$i++){
$char = substr($abc,0-$i,1);//反向获取单个字符
$int = ord($char);
$ten += ($int-65)*pow(26,$i-1);
}
return $ten;
}