多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## phpoffice 插件 一:安装phpoffice/phpspreadsheet ~~~ composer require phpoffice/phpspreadsheet ~~~ 二:phpoffice/phpspreadsheet API接口详解 PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。 在使用phpoffice/phpspreadsheet的API接口前,确保引入了正确的文件并实例化 ~~~ use PhpOffice\PhpSpreadsheet\Spreadsheet;//引入文件 $spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();//创建一个新的excel文档$sheet = $spreadsheet->getActiveSheet();//获取当前操作sheet的对象 ~~~ ### 1:设置字体 ~~~ $sheet->getStyle('A7:B7')->getFont()->setBold(true)->setName('Arial')->setSize(10);//将A7至B7两单元格设置为粗体字,Arial字体,10号字 $sheet->getStyle('B1')->getFont()->setBold(true);//将B1单元格设置为粗体字 ~~~ ### 2:设置颜色 ~~~ $sheet->getStyle('A1')->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);//将A1单元格文字颜色设为红色 ~~~ ### 3:设置列宽 ~~~ $sheet->getColumnDimension('A')->setWidth(20);//将A列的宽度设为20(字符) $sheet->getColumnDimension('B')->setAutoSize(true);//将B列的宽度设为自动宽度 $sheet->getDefaultColumnDimension()->setWidth(12);//设置默认列宽为12 ~~~ ### 4:设置行高 ~~~ $sheet->getRowDimension('10')->setRowHeight(100);//将第十行的高度设为100pt $sheet->getDefaultRowDimension()->setRowHeight(15);//设置默认行高为15 ~~~ ### 5:对齐 ~~~ $sheet->getStyle('A:D')->getAlignment() ->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER) //设置垂直居中 ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER) //设置水平居中 ->setWrapText(true); //设置自动换行 ~~~ ### 6:合并单元格 ~~~ $sheet->mergeCells('A1:D2');//A1到D2合并为一个单元格 ~~~ ### 7:将合并后的单元格拆分 ~~~ $sheet->unmergeCells('A1:D2');//将合并后的单元格拆分。 ~~~ ### 8:使用applyFromArray实现单元格样式设置 ~~~ //样式变量 $style = [ //设置字体样式 'font' => [ 'name' => 'Arial', 'bold' => true, 'italic' => false, 'underline' => Font::UNDERLINE_DOUBLE, 'strikethrough' => false, 'color' => [ 'rgb' => '808080' ] ], //设置边框线样式 'borders' => [ //allBorders所有的边框线样式 //左边框线 'bottom' => [ 'borderStyle' => Border::BORDER_DASHDOT, 'color' => [ 'rgb' => '808080' ] ], //上边框线 'top' => [ 'borderStyle' => Border::BORDER_DASHDOT, 'color' => [ 'rgb' => '808080' ] ] ], //对齐样式 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, 'wrapText' => true, ], //是否使用前缀 'quotePrefix' => true ]; $sheet->getStyle('A1:D1')->applyFromArray($style); ~~~ ### 9:设置工作表标题 ~~~ $sheet->setTitle('Hello');;//设置当前工作表标题。 ~~~ ### 10:设置单元格的格式 ~~~ $sheet->getStyle('D2')->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);//将D2单元格的格式设为文本格式 $sheet->getStyle('A1:D2')->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);//将A1到D2的单元格设置为文本格式 ~~~ ### 11:换行 ~~~ $sheet->getCell('A4')->setValue("hello\nworld");//将A4单元格的hello和world换行 ~~~ ### 12:超链接 ~~~ //将A2单元格内容设置blog并点击跳转$sheet->setCellValue('A2', 'blog');$sheet->getCell('A2')->getHyperlink()->setUrl('https://www.php.net'); ~~~ ### 13:使用函数 常用函数有:总和(SUM),最大数(MAX),最小数(MIN),平均值(AVERAGE) ~~~ $sheet->setCellValue('B5', '=SUM(B1:B4)');//将B5单元格的内容设为B1到B4的之和 ~~~ 14:设置文档属性 ~~~ $spreadsheet->getProperties() ->setCreator("author") //作者 ->setLastModifiedBy("last-author") //最后修改者 ->setTitle("title") //标题 ->setSubject("subject") //副标题 ->setDescription("description") //描述 ->setKeywords("keywords") //关键字 ->setCategory("category"); //分类 ~~~ 三:简单实现生成excel ~~~ 待补充 ~~~ 四:读取excel文件 ~~~ <?php namespace Spread; // 生成Excel use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Alignment as PHPExcel_Style_Alignment; use PhpOffice\PhpSpreadsheet\Cell\DataType as PHPExcel_Cell_DataType; use PhpOffice\PhpSpreadsheet\Style\Fill as PHPExcel_Style_Fill; use PhpOffice\PhpSpreadsheet\Style\Border as Border; // 读取Excel use PhpOffice\PhpSpreadsheet\IOFactory; class Spread{ // Excel读取 public static function excelReader($excelfile){ $inputFileType = IOFactory::identify($excelfile); // Xlsx $excelReader = IOFactory::createReader($inputFileType); // 载入excel文件 $PHPExcel = $excelReader->load($excelfile); // 读取第一個工作表 $sheet = $PHPExcel->getSheet(0); // 取得总行数 // $highest_row = $sheet->getHighestRow(); // 取得列数 字母abc... // $highest_column = $sheet->getHighestColumn(); // $sheetdata = $sheet->toArray();---全部下标都是从0开始 // 保留二维数组从1,里面的一维数组从A...... $sheetdata = $sheet->toArray(null, true, true, true); // 直接返回数组数据 return $sheetdata; } } ~~~ ~~~ public function data() { $fileName = root_path().'public/'."demo.xlsx"; $data = Spread::excelReader($fileName); //print_r($data); $tmp['code'] = '0'; $tmp['count'] = count($data); $tmp['data'] = $data; return json($tmp); } ~~~