一、安装
1、修改php.ini配置文件,开启fileinfo扩展:
2、使用composer安装:
composer require phpoffice/phpspreadsheet
二、引入加载文件
getActiveSheet(); //处理单元格属性必须先调用此方法
三、常用方法
1、单元格赋值:
1.1、setCellValue($pCoordinate, $pValue) 通过坐标设置单元格值:
$spreadsheet->getActiveSheet()->setCellValue('A1', 'PhpSpreadsheet');
1.2、setValue( $pValue) :
/*该方法需先检索单元格对象*/
$spreadsheet->getActiveSheet()->getCell('B8')->setValue('Some value');
1.3、fromArray($array, $nullValue = null, $startCell = ‘A1’, $strictNullComparison = false) 通过数组赋值:
说明:如果传递二维数组,则将其视为一系列行和列;如果传递一维数组一维数组将被视为一行;如果一维数组需要作为列编写,则使用array_chunk()对数组进行处理,如下所示:
/*二维数组*/
$arrayData = [
[NULL, 2010, 2011, 2012],
['Q1', 12, 15, 21],
['Q2', 56, 73, 86],
['Q3', 52, 61, 69],
['Q4', 30, 32, 0],
];
$spreadsheet->getActiveSheet()->fromArray( $arrayData,NULL,'C3' );
/*一维数组*/
$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
$spreadsheet->getActiveSheet()->fromArray($rowArray, NULL,'C3');
/*一维数组列编写*/
$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
$columnArray = array_chunk($rowArray, 1);
$spreadsheet->getActiveSheet()->fromArray($columnArray,NULL,'C3');
1.4、setCellValueByColumnAndRow($columnIndex, $row, $value) 按列和行赋值:
$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(1, 5, 'PhpSpreadsheet');
2、日期和时间:
/*方法一*/
$time = time();
$spreadsheet->getActiveSheet()->setCellValue('D1',\PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($time));
$spreadsheet->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
/*方法二*/
$spreadsheet->getActiveSheet()->setCellValue('D1', 39813); //从1900/01/01到现在的天数
$spreadsheet->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
NumberFormat预定义日期格式说明:
3、获取单元格值:
3.1、通过坐标:
首先使用getCell()方法从工作表中检索该单元格,然后使用getValue()方法读取单元格的值。
$cellValue = $spreadsheet->getActiveSheet()->getCell('A1')->getValue();
3.2、通过行和列:
首先使用getCellByColumnAndRow()方法从工作表中检索该单元格,然后使用getValue()方法读取单元格的值。
$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(1, 4)->getCalculatedValue();
4、列宽:
将D列宽度设置为12(字符)
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(12);
自动计算列宽:
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
设置默认列宽:
$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);
5、行高:
设置第一行行高为100pt:
$spreadsheet->getActiveSheet()->getRowDimension('1')->setRowHeight(100);
设置默认行高:
$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);
三、读取文件
3.1、知道文件类型:
方法一:
实例化该文件类型的阅读器对象,然后使用阅读器的load()方法将文件读取为Spreadsheet对象。但是,如果文件类型不正确(例如,扩展名为.xls的CSV文件),则可能会得到无法预测的结果。
$inputFileName = './sampleData/example1.xls';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
$spreadsheet = $reader->load($inputFileName);
方法二:
使用IOFactory的createReader()方法为您实例化阅读器对象
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Slk';
// $inputFileType = 'Gnumeric';
// $inputFileType = 'Csv';
$inputFileName = './sampleData/example1.xls';
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$spreadsheet = $reader->load($inputFileName);
3.2、不知道文件类型:
方法一:
使用自动文件类型解析模式(自动类型解析模式比显式模式稍慢):
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("05featuredemo.xlsx");
方法二:
先使用IOFactory::identify() 在使用该createReader()方法实例化Reader对象。
$inputFileName = './sampleData/example1.xls';
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$spreadsheet = $reader->load($inputFileName);
3.3、设置文件只读:
$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($inputFileName);
3.4、工作表:
当您从电子表格文件加载工作簿时,它将与所有现有工作表一起加载(除非您指定仅应加载某些工作表)
方法一、通过索引位置访问工作表:
$countSheet = $spreadsheet -> getSheetCount(); //获取工作表数量
for ($i = 0; $i < $countSheet; $i++)
{
$currentSheet = $spreadsheet -> getSheet($i); //获取工作表内容
$dataArray[$i] = $currentSheet -> toArray(); //转换为数组
print_r($dataArray[$i]);
}
方法二、通过名称访问工作表:
$dataArray = [];
$currentSheet = $spreadsheet->getSheetByName('Sheet1');
$dataArray = $currentSheet->toArray();
var_dump($dataArray);
3.5、获取工作表行/列数:
$sheet = $spreadsheet->getSheet($whatTable); // 读取工作表
$highest_row = $sheet->getHighestRow(); // 取得总行数
$highest_column = $sheet->getHighestColumn(); ///取得列数