Laravel 使用 PhpSpreadsheet处理Excel
引入类库
composer require phpoffice/phpspreadsheet

创建路由
//创建控制器
php artisan make:controller ExcelController
//填写路由
Route::get('excel','ExcelController@excelRead');
Route::get('excelWrite','ExcelController@excelWrite');
读取excel
public function excelRead() {
$inputFileType = 'Xls';
$inputFileName = storage_path() . DIRECTORY_SEPARATOR .'123.xls';
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($inputFileName);
$worksheetData = $reader->listWorksheetInfo($inputFileName);
$sheet = $spreadsheet->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$dataInfo = $sheet->toArray();
$cellValue = $sheet->getCell("A1")->getValue();
$sheetData = $sheet->rangeToArray('A1:C5');
$data = array();
$i = 0;
foreach ($sheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(FALSE);
foreach ($cellIterator as $cell) {
$data[$i][] = $cell->getValue();
}
$i++;
}
dd($data);
}
写Excel
public function excelWrite() {
$arr = [
[
'name' => '张国',
'sex' => '男',
'age' => '16'
],
[
'name' => '杨荣',
'sex' => '女',
'age' => '17'
],
];
$spreadSheet = new Spreadsheet();
$sheet = $spreadSheet->getActiveSheet();
$sheet->setCellValue('A1', '姓名');
$sheet->setCellValue('B1', '性别');
$sheet->setCellValue('C1', '年龄');
$sheet->getStyle('B1:C1')->getFont()->setBold(true)->setName('Arial')->setSize(10);
$sheet->getStyle('A2')->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
$sheet->getColumnDimension('A')->setWidth(30);
$sheet->getRowDimension(3)->setRowHeight(100);
$sheet->getColumnDimension('B')->setAutoSize(true);
$sheet->getDefaultColumnDimension()->setWidth(12);
$sheet->getDefaultRowDimension()->setRowHeight(15);
$sheet->getCell('A2')->getHyperlink()->setUrl('http://www.baidu.com');
$sheet->setCellValue('A5',"换\n行");
$sheet->getStyle('A5')->getAlignment()->setWrapText(true);
$sheet->setTitle('花名册');
$styleArray = [
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
'borders' => [
'allBorders' =>[
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
],
],
];
$sheet->getStyle('A1:C5')->applyFromArray($styleArray);
$row = 2;
foreach ($arr as $key => $value) {
$column = 1;
foreach ($value as $k => $v){
$sheet->setCellValueByColumnAndRow($column, $row, $v);
$column++;
}
$row++;
}
$writer = new Xls($spreadSheet);
$writer->save(storage_path() . DIRECTORY_SEPARATOR . '花名册.xls');
}
|