PHP生成Excel表格 PHP导入Excel数据
下载PHPexcel
PHP生成Excel表格
//PHPExcel读取导入Excel数据到数据库(2003,2007通用)使用方法:
//先用excel2array()方法将excel表中的数据存储到数组,在从遍历二维数组将数据保存进数据库
require_once "./PHPExcel/PHPExcel.php";
require_once "./PHPExcel/PHPExcel/Cell/DataType.php";
require_once "./PHPExcel/PHPExcel/IOFactory.php";
/**
* PHP生成Excel表格函数
* @param $title 生成表格标题
* @param array[] $content 表格内容 二维数组
* @return 返回生成的Excel路径
*/
function creatExcel($title,$content=[[]])
{
//实例化PHPExcel类,类似于在桌面上新建一个Excel表格
$PHPExcel = new \PHPExcel();
//获得当前活动sheet的操作对象 默认创建一个活动的窗口
$PHPSheet = $PHPExcel->getActiveSheet();
//给当前活动sheet设置名称
$PHPSheet->setTitle($title);
// 1.逐个单元格去填充数据,适合数据量较大的情况
//给当前活动sheet填充数据,数据填充是按顺序一行一行填充的,假如想给A1留空,可以直接setCellValue('A1','');
// $PHPSheet->setCellValue('A1','姓名')->setCellValue('B1','分数');
// $PHPSheet->setCellValue('A2','张三')->setCellValue('B2','50');
// 2.一次性填充数据,适合数据量较小的情况
// $array = [
// ["姓名","分数",'性别'],
// ["老王","90",'男'],
// ["小白","80",'男'],
// ];
$PHPSheet->fromArray($content);
//按照指定格式生成Excel文件,'Excel2007'表示生成2007版本的xlsx,
$PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,'Excel2007');
//表示在$path路径下面生成demo.xlsx文件
$PHPWriter->save('./'.$title.'.xlsx');
return './'.$title.'.xlsx';
}
PHP获取Excel表格图片和数据
/**
* 获取Excel表格图片和数据
* @param string $content Excel表格位置
* @return 二维数组 表格数据和图片地址
*/
function getImage(string $content)
{
header("content-type:texthtml;charset-ut8");
//读取的excel文件
date_default_timezone_set("PRC");//默认时区设置成中国标准时间。
//读取excel文件
try{
$inputFileType = PHPExcel_IOFactory::identify($content);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($content);
} catch(Exception $e) {
die('加载文件发生错误: "'.pathinfo($content,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);
switch($img->getExtension()) {
case 'jpg':
$imageFileName.='.jpg';
imagejpeg(imagecreatefrompng($img->getpath()),$imageFilePath.$imageFileName);
break;
case 'gif':
$imageFileName.='.gif';
imagegif(imagecreatefrompng($img->getpath()),$imageFilePath.$imageFileName);
break;
case 'png':
$imageFileName.=' .png';
imagepng(imagecreatefrompng($img->getpath()),$imageFilePath.$imageFileName);
break;
}
//由于图片所在位置的列号为字母,转化为数字
$ten= 0;
$len = strlen($startColumn);
for($i=1 ;$i<=$len;$i++){
$char = substr($startColumn,0-$i,1);//反向获取单个字符
$int = ord($char);
$ten += ($int -65)* pow(26,$i-1);
}
$startColumn = $ten;
$data[$startRow- 1][$startColumn]=$imageFilePath.$imageFileName;//把图片插入到数组中
}
return $data;//返回二维数组
}