makeSpreadsheet(); return response()->streamDownload(function () use ($spreadsheet): void { $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->setPreCalculateFormulas(false); $writer->save('php://output'); $spreadsheet->disconnectWorksheets(); }, '资金预测表-导入模板.xlsx', [ 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'Cache-Control' => 'no-store, no-cache, must-revalidate', ]); } private function makeSpreadsheet(): Spreadsheet { $spreadsheet = new Spreadsheet(); $spreadsheet->getProperties()->setTitle('资金预测表导入模板')->setSubject('资金预测表批量导入'); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('资金预测表'); $sheet->setShowGridlines(false); $sheet->freezePane('C3'); $sheet->getRowDimension(1)->setRowHeight(26); $sheet->getRowDimension(2)->setRowHeight(24); $sheet->setCellValueExplicit('A1', '预测月份', DataType::TYPE_STRING); $sheet->setCellValueExplicit('B1', '公司名称', DataType::TYPE_STRING); $sheet->mergeCells('A1:A2'); $sheet->mergeCells('B1:B2'); $labels = FundForecast::columnLabels(); $columnIndex = 3; foreach (FundForecastPage::GROUPS as $group) { $startColumn = Coordinate::stringFromColumnIndex($columnIndex); $endColumn = Coordinate::stringFromColumnIndex($columnIndex + count($group['fields']) - 1); $sheet->setCellValueExplicit("{$startColumn}1", $group['label'], DataType::TYPE_STRING); $sheet->mergeCells("{$startColumn}1:{$endColumn}1"); foreach ($group['fields'] as $field) { $column = Coordinate::stringFromColumnIndex($columnIndex++); $sheet->setCellValueExplicit("{$column}2", $labels[$field], DataType::TYPE_STRING); $sheet->getColumnDimension($column)->setWidth(16); } } $lastColumn = Coordinate::stringFromColumnIndex($columnIndex - 1); $sheet->getColumnDimension('A')->setWidth(14); $sheet->getColumnDimension('B')->setWidth(28); $sheet->getStyle("A1:{$lastColumn}2")->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER); $sheet->getStyle("A1:{$lastColumn}2")->getFont()->setBold(true); $sheet->getStyle("A1:{$lastColumn}1")->getFont()->getColor()->setARGB('FFFFFFFF'); $sheet->getStyle("A1:{$lastColumn}1")->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FF856632'); $sheet->getStyle("A2:{$lastColumn}2")->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FFF7F0DE'); $sheet->getStyle("A1:{$lastColumn}2")->getBorders()->getAllBorders() ->setBorderStyle(Border::BORDER_THIN)->getColor()->setARGB('FFD8D2C7'); $sheet->getStyle('A3:A' . (self::MAX_ROWS + 2))->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_TEXT); $sheet->getStyle('C3:AD' . (self::MAX_ROWS + 2))->getNumberFormat()->setFormatCode('#,##0.00'); for ($row = 3; $row <= self::MAX_ROWS + 2; $row++) { $sheet->setCellValue("AA{$row}", "=SUM(C{$row}:H{$row})"); $sheet->setCellValue("AB{$row}", "=SUM(I{$row}:N{$row})"); $sheet->setCellValue("AC{$row}", "=SUM(O{$row}:Z{$row})"); $sheet->setCellValue("AD{$row}", "=AA{$row}+AB{$row}-AC{$row}"); $sheet->setCellValue("AE{$row}", "=IF(AD{$row}<0,\"是\",\"否\")"); } return $spreadsheet; } }