php 使用 PhpSpreadsheet 导入导出操作

1,121 阅读1分钟

1 导入数据

在实际的工作经验中,需要从 Excel 表格读取数据,插入到数据库保存。所以在这里介绍下 PhpSpreadsheet 这个强大的插件功能。

    # 引入 spreadsheet 类
    use PhpOffice\PhpSpreadsheet\IOFactory;
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    
    # 读取Excel表格数据
    # 有Xls和Xlsx格式两种
   if( $fileExtendName =='xlsx' )
   {
       # 实例化阅读器对象
       $objReader = IOFactory::createReader('Xlsx');
   }else{
       # 实例化阅读器对象
      $objReader = IOFactory::createReader('Xls');
   }
   
   $objReader->setReadDataOnly(TRUE);
   $filename = $filePath . $info->getSaveName();
   # $filename可以是上传的表格,或者是指定的表格
   $objPHPExcel = $objReader->load($filename);  
   # excel中的第一张sheet
   $sheet = $objPHPExcel->getSheet(0);
   # 取得总行数
   $highestRow = $sheet->getHighestRow(); 
   # 取得总列数
   $highestColumn = $sheet->getHighestColumn();   
   
   # 循环读取excel表格,整合成数组。如果是不指定key的二维,就用$data[i][j]表示。
   for ($j = 2; $j <= $highestRow; $j++) {
      $tmp = $j - 2;
      # 读取单元格的值
      $software_begtime= $objPHPExcel->getActiveSheet()->getCell("AR" . $j)->getValue();
      # 单元格实践格式转换
      $toTimestamp = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($software_begtime);
  }
  

2 导出数据

在实际的工作经验中,要导出带样式的 Excel 表格,所以在这里介绍下 PhpSpreadsheet 这个强大的插件功能。

2.1 设置表格字体样式

```
# 引入 spreadsheet 类
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
  
# 实例化 Spreadsheet 对象 
$spreadsheet = new Spreadsheet();
# 获取活动工作薄
$sheet_doing = $spreadsheet->getActiveSheet();
# 设置工作表标题名称
$sheet_doing->setTitle('正在做的方案');
# 样式设置
$sheet_doing_style = $sheet_doing->getStyle($letter.$row);
# 设置字体
$objFontA1= $sheet_doing_style->getFont();
$objFontA1->setName($font_family);
$objFontA1->setSize(11);
$objFontA1->setBold(true);
$objFontA1->getColor()->setARGB('FF000000');
# 设置对齐方式
$objAlignA1 = $sheet_doing_style->getAlignment();
$objAlignA1->setHorizontal(Alignment::HORIZONTAL_CENTER);
$objAlignA1->setVertical(Alignment::VERTICAL_CENTER);
# 设置边框
$objBorderA1 = $sheet_doing_style->getBorders();
$objBorderA1->getTop()->setBorderStyle(Border::BORDER_THIN);
$objBorderA1->getTop()->getColor()->setARGB('FF000000'); // color
$objBorderA1->getBottom()->setBorderStyle(Border::BORDER_THIN);
$objBorderA1->getLeft()->setBorderStyle(Border::BORDER_THIN);
$objBorderA1->getRight()->setBorderStyle(Border::BORDER_THIN);
# 设置填充颜色
$objFillA1 = $sheet_doing_style->getFill();
$objFillA1->setFillType(Fill::FILL_SOLID);
$objFillA1->getStartColor()->setARGB('FFCCCCFF');
# 设置换行
$sheet_doing_style->getAlignment()->setWrapText(true);
# 设置值
$sheet_doing->setCellValue($letter.$row, $arr_doing_title[$i-1]);
```

2.2 设置导出多个工作薄

```
# 引入 spreadsheet 类
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
  
# 实例化 Spreadsheet 对象 
$spreadsheet = new Spreadsheet();
# 创建新的活动工作薄
$sheet_finished = $spreadsheet->createSheet(2)->setTitle('sheet2');
```

2.3 设置导出方式

```
  $fileName = '学生信息1';
  $fileType = 'Xlsx';

# 1.下载到服务器
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($fileName.'.'.$fileType);

# 2.输出到浏览器
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); //按照指定格式生成Excel文件
$this->excelBrowserExport($fileName, 'Xlsx');
$writer->save('php://output');