input('date', []); if (count($date) !== 0) { $where[] = ['create_at', '>=', $date[0]]; $where[] = ['create_at', '<=', $date[1]]; } $list = $safeconference->getAllList($where, ['*'], ['id' => 'asc'], ['org', 'typeInfo']); $new_list = []; foreach ($list as $v) { $data = []; $data['id'] = $v['id']; $data['type_info_name'] = $v['type_info']['name']; $data['anchor'] = $v['anchor_info']['name']; $data['name'] = $v['name']; $data['drawup'] = $v['drawup']; $data['notify'] = ''; $new_list[] = $data; } $title = "安全生产会议台账"; $exportField = ['序号', '会议类别', '主持人', '会议主题', '会议时间', '备注']; return $this->excelExport($title, $exportField, $new_list); } private function excelExport($title = "", $headArr = [], $data = []) { $spreadsheet = new Spreadsheet(); $objPHPExcel = $spreadsheet->getActiveSheet(); $objPHPExcel->setTitle($title); $objPHPExcel->setCellValueByColumnAndRow(1, 1, $title); // 设置表头 $key = ord("A"); $objPHPExcel->mergeCells('A1:F1'); $objPHPExcel->setCellValue('A1', $title); $styleArray = [ 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中 'vertical' => Alignment::VERTICAL_CENTER, //垂直居中 ], ]; $objPHPExcel->getStyle('A1')->applyFromArray($styleArray); $objPHPExcel->getDefaultColumnDimension()->setWidth(16); $objPHPExcel->getRowDimension('1')->setRowHeight(30); $objPHPExcel->getColumnDimension('A')->setWidth(15); $objPHPExcel->getColumnDimension('B')->setWidth(15); $objPHPExcel->getColumnDimension('C')->setWidth(30); $objPHPExcel->getColumnDimension('D')->setWidth(30); $objPHPExcel->getColumnDimension('E')->setWidth(30); $objPHPExcel->getColumnDimension('F')->setWidth(30); $objPHPExcel->getStyle('A1')->getFont()->setBold(true)->setName('黑体')->setSize(16); foreach ($headArr as $v) { $colum = chr($key); $objPHPExcel->setCellValue($colum . '2', $v); $objPHPExcel->getStyle($colum . '2')->applyFromArray($styleArray)->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor() ->setARGB('aaaaaa'); $key += 1; } $column = 3; foreach ($data as $key => $row) { // 行写入 $objPHPExcel->setCellValue('A' . $column, $row['id']); $objPHPExcel->setCellValue('B' . $column, $row['type_info_name']); $objPHPExcel->setCellValue('C' . $column, $row['anchor']); $objPHPExcel->setCellValue('D' . $column, $row['name']); $objPHPExcel->setCellValue('E' . $column, $row['drawup']); $objPHPExcel->setCellValue('F' . $column, $row['notify']); $column++; } $objPHPExcel->getStyle('A3:' . 'F' . $column)->applyFromArray($styleArray); $writer = new Xlsx($spreadsheet); $path = public_path() . '/excel/' . $title . '.xlsx'; $path2 = '/excel/' . $title . '.xlsx'; $writer->save($path); $url = "https://" . request()->host() . ':37100'; $res['url'] = $url . $path2; $res['name'] = $title; //删除临时的sheet $spreadsheet->disconnectWorksheets(); unset($spreadsheet); return $res; } public function exportPrint($id) { $safeconference = new Safeconference(); $safeconferenceData = $safeconference->with(['org', 'typeInfo'])->where('id', $id)->first(); $adminUserModel = new AdminUser(); $userList = $adminUserModel->getAllList([['id', 'in', $safeconferenceData['writer']]], ['*'], ['id' => 'asc'], ['role', 'userOrgs']); $wNum = count($userList); //应到人数 $safeconferenceSign = new safeconferenceSign(); $signList = $safeconferenceSign->getAllList([['s_id', '=', $id]], ['*'], ['id' => 'asc']); $aaNum = count($signList); //实到人数 // 创建 PhpWord 实例 $PHPWord = new PhpWord(); $cellHCentered = ['align' => 'center']; //段落居中 $cellLeft = ['align' => 'left']; //段落居左对齐 //定义样式数组 $styleTable = [ 'borderSize' => 1, 'borderColor' => '070707', // 'cellMargin' => 80 ]; //定义第一行的样式 $styleFirstRow = [ // 'borderBottomSize' => 18, // 'borderBottomColor' => '070707', // 'bgColor' => 'c3bcbb' ]; //定义第一行的字体 $fontStyle = ['bold' => true, 'align' => 'center', 'size' => 12]; //定义单元格样式数组 居中 $styleCell = ['valign' => 'center']; //添加标题样式 标题样式可以自己取名,比如2,3 $PHPWord->addTitleStyle(2, array('bold' => true, 'size' => 17, 'name' => 'Arial', 'Color' => '333333'), array('align' => 'center')); //添加表格样式 $PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow); $section = $PHPWord->addSection(); //添加2级标题 2对应上面的标题样式 $section->addTitle("安全生产会议记录", 2); //换行 // $section->addTextBreak(1); //添加表格 $table = $section->addTable('myOwnTableStyle'); //添加一行 $table->addRow(600); $table->addCell(2000, $styleCell)->addText('会议主题', $fontStyle, $cellHCentered); $table->addCell(8000, ['valign' => 'center', 'gridSpan' => 3])->addText($safeconferenceData['name'], $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('会议时间', $fontStyle, $cellHCentered); $table->addCell(3000, $styleCell)->addText($safeconferenceData['drawup'], $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('会议地点', $fontStyle, $cellHCentered); $table->addCell(3000, $styleCell)->addText($safeconferenceData['location'], $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('组织部门', $fontStyle, $cellHCentered); $table->addCell(3000, $styleCell)->addText($safeconferenceData['org']['name'] ?? '', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('主持人', $fontStyle, $cellHCentered); $table->addCell(3000, $styleCell)->addText($safeconferenceData['anchor_info']['nickname'] ??'', $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('参会人员', $fontStyle, $cellHCentered); $table->addCell(8000, ['valign' => 'center', 'gridSpan' => 3])->addText('本次会议应到 ' . $wNum . ' 人,实到 ' . $aaNum . ' 人', $fontStyle, $cellHCentered); $table->addRow($section->getStyle()->getPageSizeH() - (3000 + 3000)); $table->addCell(10000, ['gridSpan' => 4])->addText('  会议内容记录:  ' . strip_tags($safeconferenceData['content']), $fontStyle, $cellLeft); // //添加2级标题 2对应上面的标题样式 $section->addTitle("会议签到表", 2); //添加表格 $table = $section->addTable('myOwnTableStyle'); //添加一行 $table->addRow(600); $table->addCell(2000, $styleCell)->addText('会议主题', $fontStyle, $cellHCentered); $table->addCell(8000, ['valign' => 'center', 'gridSpan' => 4])->addText($safeconferenceData['name'], $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('会议时间', $fontStyle, $cellHCentered); $table->addCell(2000, ['valign' => 'center', 'gridSpan' => 2])->addText($safeconferenceData['drawup'], $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('会议地点', $fontStyle, $cellHCentered); $table->addCell(2000, ['valign' => 'center', 'gridSpan' => 2])->addText($safeconferenceData['location'], $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('参会人员', $fontStyle, $cellHCentered); $table->addCell(8000, ['valign' => 'center', 'gridSpan' => 4])->addText('本次会议应到 ' . $wNum . ' 人,实到 ' . $aaNum . ' 人', $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('序号', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('姓名', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('部门(单位)', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('岗位', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('签到', $fontStyle, $cellHCentered); $num = 2000; foreach ($userList as $k => $v) { $num += 600; $table->addRow(600); $org = ''; foreach ($v['user_orgs'] as $item) { $org .= $item['org']['name'] . '/'; } $org = substr($org, 0, strlen($org) - 1); $table->addCell(2000, $styleCell)->addText($k + 1, $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText($v['nickname'], $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText($org, $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText($v['role']['name'] ?? '', $fontStyle, $cellHCentered); $create_time = ''; foreach ($signList as $vv) { if ($v['id'] == $vv['admin_user_id']) { $create_time = $vv['create_time']; } } $table->addCell(2000, $styleCell)->addText($create_time, $fontStyle, $cellHCentered); } $next = floor((13000 - $num % 13000) / 600); for ($i = 0; $i < $next; $i++) { // 继续添加空数据行 $table->addRow(600); // 添加空单元格 $table->addCell(2000, $styleCell)->addText('', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('', $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('', $fontStyle, $cellHCentered); } $section = $PHPWord->addSection(); //添加2级标题 2对应上面的标题样式 $section->addTitle("会议影像资料卡片", 2); //添加表格 $table = $section->addTable('myOwnTableStyle'); //添加一行 $table->addRow(600); $table->addCell(2000, $styleCell)->addText('会议主题', $fontStyle, $cellHCentered); $table->addCell(8000, ['valign' => 'center', 'gridSpan' => 3])->addText($safeconferenceData['name'], $fontStyle, $cellHCentered); $table->addRow(600); $table->addCell(2000, $styleCell)->addText('会议时间', $fontStyle, $cellHCentered); $table->addCell(3000, $styleCell)->addText($safeconferenceData['drawup'], $fontStyle, $cellHCentered); $table->addCell(2000, $styleCell)->addText('会议地点', $fontStyle, $cellHCentered); $table->addCell(3000, $styleCell)->addText($safeconferenceData['location'], $fontStyle, $cellHCentered); $table->addRow($section->getStyle()->getPageSizeH() - (2000 + 3000)); $cell = $table->addCell(10000, ['gridSpan' => 4]); $c = $cell->addTextRun(); $c->addTextBreak(); for ($i = 0; $i < count($safeconferenceData['images']); $i++) { $c->addImage(public_path() . $safeconferenceData['images'][$i]['url'], ['width' => 222, 'height' => 222, 'wrappingStyle' => 'behind']); } // 保存 Word 文档 $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($PHPWord, 'Word2007'); $filename = date('Y年m月d日') . $safeconferenceData['name']; $path = public_path() . '/word/' . $filename . '.docx'; $path2 = '/word/' . $filename . '.docx'; $objWriter->save($path); // 构建下载链接 $url = "https://" . request()->host() . ':37100'; $res['url'] = $url . $path2; $res['name'] = $filename; // 返回下载链接 return $res; } }