<?php
/**
https://blog.csdn.net/qq_39647045/article/details/82385736
*/
/**
* 简单的数据输入
*/
//引入核心文件
require_once dirname(__FILE__)."/PHPExcel/Classes/PHPExcel.php";
//创建数据对象
$objPHPExcel = new PHPExcel();
//如果是要用某个Excel模板那么久使用该方法来创建数据对象
// $objPHPExcel = PHPExcel_IOFactory::load("a.xlsx");
/**
* 文档属性设置
*/
// Set document properties 设置文档属性
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
/**
* 单元格操作
*/
//1.填充数据到单元格
$col = "A";
//切换到第0个sheet 设置第0个sheet为当前活动sheet
$objPHPExcel->setActiveSheetIndex(0)
// Add some data 为单元格录入数据
->setCellValue("{$col}1", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}2", 'HELLO')
->setCellValue("{$col}3", 'world!')
->setCellValue("{$col}4", '我是中文')
->setCellValue("{$col}5", 'world!')
->setCellValue("{$col}6", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}7", 'HELLO');
//设置数据的同时指定数据的类型
$objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit("{$col}8", "123456789123456789", PHPExcel_Cell_DataType::TYPE_STRING);
//1.填充数据到单元格
$col = "B";
//切换到第0个sheet 设置第0个sheet为当前活动sheet
$objPHPExcel->setActiveSheetIndex(0)
// Add some data 为单元格录入数据
->setCellValue("{$col}1", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}2", 'HELLO')
->setCellValue("{$col}3", 'world!')
->setCellValue("{$col}4", '我是中文')
->setCellValue("{$col}5", 'world!')
->setCellValue("{$col}6", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}7", 'HELLO');
//1.填充数据到单元格
$col = "C";
//切换到第0个sheet 设置第0个sheet为当前活动sheet
$objPHPExcel->setActiveSheetIndex(0)
// Add some data 为单元格录入数据
->setCellValue("{$col}1", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}2", 'HELLO')
->setCellValue("{$col}3", 'world!')
->setCellValue("{$col}4", '我是中文')
->setCellValue("{$col}5", 'world!')
->setCellValue("{$col}6", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}7", 'HELLO');
//2.单元格填充样式
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY);
//3.单元格填充颜色
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF7F24');
//4.设置单元格行默认高度 如果同时要与【5.设置行高】使用 那么该操作放在前面
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);
//5.设置单元格行默认高度 如果同时要与【4.设置列宽】 使用 那么该操作放在前面
$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);
//6.设置列宽
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
//7.设置行高
$objPHPExcel->getActiveSheet()->getRowDimension('9')->setRowHeight(40);
//8 合并单元格
$objPHPExcel->getActiveSheet()->mergeCells('C10:D20');
//合并后用第一个单元格定位
$objPHPExcel->getActiveSheet()->setCellValue("C10", '合并后按照第一个单元格坐标操作');
//9.单元格边框
$styleArray = array(
'borders' => array(
//表示所有单元格的四周
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THICK,//粗 边框
// 'style' => PHPExcel_Style_Border::BORDER_THIN,//细 边框
'color' => array('argb' => 'FFFF0000'),//边框颜色
),
),
);
$objPHPExcel->getActiveSheet()->getStyle('F10:G15')->applyFromArray($styleArray);
/**
* 排版
*/
//1.垂直对其方式
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//2.水平对其方式
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
//3.冻结窗口 B2为最左上角能动的第一个单元格
$objPHPExcel->getActiveSheet()->freezePane("B2");
/**
* 字体样式
*/
//1.单元格文字颜色
$objPHPExcel->getActiveSheet()->getStyle('C2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
//2.字体加粗
$objPHPExcel->getActiveSheet()->getStyle('C2')->getFont()->setBold(true);
//3.字体大小
$objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(5);
/**
* 插入图片
*/
$pic_path = "demo.png";
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('图片');
$objDrawing->setDescription('图片');
//得到图片
$objDrawing->setPath($pic_path);
//设置图片的高度,只设置高度,宽度自动等比缩放
$objDrawing->setHeight(200);
//设置图片宽度目前测试到没有效果
// $objDrawing->setWidth(40);
//图片的左上角与指定单元格的左上角对齐
$objDrawing->setCoordinates('I9');
//指定将图片添加到哪个sheet 示例为当前sheet
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
/**
* sheet名称
*/
//设置当前sheet的名字
$objPHPExcel->getActiveSheet()->setTitle('Simple');
//新增另一个sheet
$col = "A";
$objPHPExcel->createSheet(1);
$objPHPExcel->setActiveSheetIndex(1)
// Add some data 为单元格录入数据
->setCellValue("{$col}1", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}2", 'HELLO')
->setCellValue("{$col}3", 'world!')
->setCellValue("{$col}4", '我是中文')
->setCellValue("{$col}5", 'world!')
->setCellValue("{$col}6", "123456789123456789")//如果不加引号 则会是数字格式,过长会变成科学计数法
->setCellValue("{$col}7", 'HELLO');
//把当前sheet设置到第一个sheet
$objPHPExcel->setActiveSheetIndex(0);
//Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//文件的下载名称
header('Content-Disposition: attachment;filename="如果我是中文呢.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
//或者将Excel存储到文件
/* $filename = "a.xlsx";
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$writer->save($filename); */
exit;
读取excel中的数据:
$PHPExcel = PHPExcel_IOFactory::load($excelPath);
如果是tp5要使用PHPExcel那么需要将 PHPExcel文件放到vendor目录下,

然后再需要使用的地方

//首先去人要读取的sheet
$sheet = $PHPExcel->getSheet(0);
//读取该sheet中的总行数
$highestRow = $sheet->getHighestRow();
//读取总列数
$highestColumm = $sheet->getHighestColumn();