123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- namespace app\common\server;
-
- use app\common\cache\ExportCache;
- use PhpOffice\PhpSpreadsheet\IOFactory;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Style\Border;
- use PhpOffice\PhpSpreadsheet\Style\Fill;
-
-
- class ExportExcelServer
- {
-
- protected $fileName = '';
-
- protected $exportNumber = ['order_sn', 'sn'];
-
-
-
-
- public function createExcel($excelFields, $lists)
- {
- if (empty($lists)) {
- throw new \Exception('暂无导出数据!');
- }
-
- $title = array_values($excelFields);
-
-
- $data = [];
- foreach ($lists as $row) {
- $temp = [];
- foreach ($excelFields as $key => $excelField) {
- $temp[$key] = $row[$key];
- }
- $data[] = $temp;
- }
-
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
-
-
- foreach ($title as $key => $value) {
-
- $sheet->setCellValueByColumnAndRow($key + 1, 1, $value);
- }
- $row = 2;
- foreach ($data as $item) {
- $column = 1;
- foreach ($item as $k => $value) {
- if (in_array($k, $this->exportNumber)) {
- $value = "\t" . $value . "\t";
- }
-
- $sheet->setCellValueByColumnAndRow($column, $row, $value);
- $column++;
- }
- $row++;
- }
-
- $getHighestRowAndColumn = $sheet->getHighestRowAndColumn();
- $HighestRow = $getHighestRowAndColumn['row'];
- $column = $getHighestRowAndColumn['column'];
- $titleScope = 'A1:' . $column . '1';
-
- $sheet->getStyle($titleScope)
- ->getFill()
- ->setFillType(Fill::FILL_SOLID)
- ->getStartColor()
- ->setARGB('00B0F0');
-
- $sheet->getStyle($titleScope)->getFont()->getColor()
- ->setARGB('FFFFFF');
-
-
- $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
-
- $allCope = 'A1:' . $column . $HighestRow;
- $sheet->getStyle($allCope)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
-
- $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
-
-
- $exportCache = new ExportCache();
- $src = $exportCache->getSrc();
-
- if (!file_exists($src)) {
- mkdir($src, 0775, true);
- }
-
- $fileName = $this->getFileName();
-
-
- $writer->save($src . $fileName);
-
-
- $vars = ['file' => $exportCache->setFile($fileName)];
- return (string)url("index/download/export", $vars, false, true);
- }
-
-
-
-
-
- public function setFileName($fileName)
- {
- return $this->fileName = $fileName . '-' . date('Y-m-d-His') . '.xlsx';
- }
-
-
-
-
- public function getFileName()
- {
- if (empty($this->fileName)) {
- return date('Y-m-d-His') . '.xlsx';
- }
- return $this->fileName;
- }
-
-
-
-
- public function setExportNumber($params = null): bool
- {
- if (is_null($params)) {
- return false;
- }
-
- $params = is_array($params) ? $params : [$params];
-
- foreach ($params as $item) {
- if (in_array($item, $this->exportNumber)) {
- continue;
- }
- array_push($this->exportNumber, $item);
- }
-
- return true;
- }
-
-
- }
|