PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。该项目已多年未维护,不得再使用。所有用户都必须迁移到其直接后继 PhpSpreadsheet 或其他替代方案。
目录
一、安装
二、导入操作
1、实例化读取类
2、读取文件
3、获取工作表
4、获取总行数
5、获取单元格的值
6、时间格式转换
三、导出操作
1、实例化Excel类
2、设置excel的属性
2、选择工作表
3、单元格操作
4、导出Excel
使用composer将 PhpSpreadsheet 安装到您的项目中:
composer require phpoffice/phpspreadsheet
如果您在开发机器上构建安装,而该开发机器与将要部署它的服务器的 PHP 版本不同,或者如果您的 PHP CLI 版本与运行时不同,例如 php-fpm
Apache的 mod_php
,那么您可能需要在安装之前将以下内容添加到您的composer.json
:
{
"require": {
"phpoffice/phpspreadsheet": "^1.23"
},
"config": {
"platform": {
"php": "7.3"
}
}
}
然后运行
composer install
以确保检索到正确的依赖项以匹配您的部署环境
//读取文件是xlsx格式
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
//读取文件是xls格式
$reader = \PHPExcel_IOFactory::createReader('Excel5');
$file = 'excelfile.xlsx';
//获取导入类型,判断使用Excel2007或Excel5
$file_type = \PHPExcel_IOFactory::identify($file);
//读取要导入的文件
$excel = $reader->load($file , $encode = 'utf-8');
//获取总工作表数量
$sheetCount = $excel->getSheetCount();
//获取第index个工作表
$sheet = $excel->getSheet(index);
$total_rows_num = $sheet->getHighestRow();
//获取所有内容并转化为数组
$data = $sheet->toArray();
//获取单元格A1的值
$value = $sheet->getCell("A1")->getValue();
//将A2单元格的时间格式转化为 Unix 时间戳
$time = \PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell("A2")->getValue());
$objExcel = new \PHPExcel();
//创建人
$objExcel->getProperties()->setCreator("crater");
//最后修改人
$objExcel->getProperties()->setLastModifiedBy("modify");
//标题
$objExcel->getProperties()->settitle("title");
//题目
$objExcel->getProperties()->setSubject("topic");
//描述
$objExcel->getProperties()->setDescription("describe");
//关键字
$objExcel->getProperties()->setKeywords("keywords");
//种类
$objExcel->getProperties()->setCategory("type");
//选择当前工作表
$objActSheet = $objExcel->getActiveSheet();
//设置第index个工作表
$objActSheet = $objExcel->setActiveSheetIndex('index');
//移除第index个工作表
$objExcel->removeSheetByIndex('index');
//设置单元格标题
$objActSheet->setTitle('Sheet Title');
//合并单元格,A1到E1
$objActSheet->mergeCells('A1:E1');
//设置第2行的高度为50
$objActSheet->getRowDimension('2')->setRowHeight(50);
//设置第A列的宽度为100
$objActSheet->getColumnDimension('A')->setWidth(100);
//设置单元格A1为纯文本
$objActSheet->getStyle('A1')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT); //日期参数 FORMAT_DATE_DATETIME
//设置A1到E1合并后的单元格自动换行
$objActSheet->getStyle('A1:E1')->getAlignment()->setWrapText(true);
//设置单元格A1字体和边框样式
$styleArray = [
'font' => [
'color' => array('rgb' => 'FF0000'), //设置字体为红色 加粗 11
'bold' => true,
'size' => 11,
],
'borders' => [ //设置边框样式
'top' => [
'style' => \PHPExcel_Style_Border::BORDER_THIN,
],
'bottom' => array(
'style' => \PHPExcel_Style_Border::BORDER_NONE,
),
],
];
$objActSheet->getStyle('A1')->applyFromArray($styleArray);
//设置所有单元格默认样式
$objActSheet->getDefaultStyle()->getFont()->setName('微软雅黑'); //字体类型
$objActSheet->getDefaultStyle()->getFont()->setSize(14); //字体大小
$objActSheet->getDefaultStyle()->getFont()->setARGB('FFFF0000'); //字体颜色
$objActSheet->getDefaultStyle()->getFont()->getFont()->setBold(true); //字体加粗
//设置单元格A1填充颜色
$objActSheet->getStyle('A1')->getFill()->getStartColor()->setARGB('FFFF0000'); //填充颜色,红色也可以用 \PHPExcel_Style_Color::COLOR_RED
//设置A1到K1单元格垂直居中
$objActSheet->getStyle('A1:K1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); //参数 VERTICAL_TOP 顶端对齐,以此类推
//设置A1到K1单元格水平居中
$objActSheet->getStyle('A1:K1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //参数 HORIZONTAL_LEFT 左对齐,以此类推
//填充内容
$objActSheet->setCellValue('A1', 'content');
//从A列第三行循环填充内容
for($i=0; $i<=100; $i++){
$i += 3;
$objActSheet->setCellValue('A'.$i, 'content');
}
//从A列第三行设置单元格限制内容,限制为 类型1和类型2
for($i=3; $i<=10002; $i++){
$objValidation = $objActSheet->getCell('A'.$i)->getDataValidation();
$objValidation->setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) //介于数字1到10之间参数用 TYPE_WHOLE,设置为 setFormula1(1) - setFormula1(10)
->setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION)
->setAllowBlank(false)
->setShowInputMessage(true)
->setShowErrorMessage(true)
->setShowDropDown(true)
->setErrorTitle('Input error') //错误标题
->setError('Input content is not allowed!') //错误内容
->setPromptTitle('Allowed input') //提示标题
->setPrompt('Only "类型1" or "类型2" is allowed.') //提示内容
->setFormula1('"类型1,类型2"'); //允许输入内容
}
//复制单元格A3限制内容
$objActSheet->getCell('A3')->setDataValidation($objValidation);
ob_end_clean();
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="' . $outfile . '"');
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
$objWriter->save('php://output');
exit;