php excel寫的氣象數(shù)據(jù)處理示例
在氣象數(shù)據(jù)處理中,我們常需要把氣象站的原始觀測數(shù)據(jù)做格式化和處理。這時我們往往需要用到Excel軟件來進行數(shù)據(jù)處理。而php excel這個PHP庫可以幫助我們直接把處理好的數(shù)據(jù)導出為Excel文件,方便我們進行數(shù)據(jù)交換和傳播。
我們舉一個實例來說明php excel是如何在氣象數(shù)據(jù)處理中發(fā)揮作用的。我們需要處理某個氣象站站點的2021年4月份的氣象數(shù)據(jù)。原始觀測數(shù)據(jù)以txt文件的形式保存在服務器上,數(shù)據(jù)用空格分隔。
站點ID 年 月 日 時 指標1 指標2 指標3 Sta1 2021 4 1 0 18.6 85.3 1021.2 Sta1 2021 4 1 1 18.5 84.9 1021.1 ...
我們需要先把txt文件中的文本數(shù)據(jù)讀入PHP中,再進行格式化和處理,最后用php excel來把處理好的數(shù)據(jù)寫成Excel文件。以下為處理過程的代碼實現(xiàn):
//讀取txt文件 $file = 'data.txt'; $lines = file($file); //指定Excel文件名和工作表名 $excel = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $worksheet = $excel->getActiveSheet(); $worksheet->setTitle('Station1_April_2021'); //寫入Excel表頭 $worksheet->setCellValue('A1', 'Station ID'); $worksheet->setCellValue('B1', 'Year'); $worksheet->setCellValue('C1', 'Month'); $worksheet->setCellValue('D1', 'Day'); $worksheet->setCellValue('E1', 'Hour'); $worksheet->setCellValue('F1', 'Indicator 1'); $worksheet->setCellValue('G1', 'Indicator 2'); $worksheet->setCellValue('H1', 'Indicator 3'); //寫入Excel數(shù)據(jù) $row = 2; foreach ($lines as $line) { $data = preg_split('/\s+/', $line, -1, PREG_SPLIT_NO_EMPTY); if ($data[0] == 'Sta1') { $worksheet->setCellValue('A'.$row, $data[0]); $worksheet->setCellValue('B'.$row, $data[1]); $worksheet->setCellValue('C'.$row, $data[2]); $worksheet->setCellValue('D'.$row, $data[3]); $worksheet->setCellValue('E'.$row, $data[4]); $worksheet->setCellValue('F'.$row, $data[5]); $worksheet->setCellValue('G'.$row, $data[6]); $worksheet->setCellValue('H'.$row, $data[7]); $row++; } } //設置Excel列寬和格式 $worksheet->getColumnDimension('A')->setWidth(20); $worksheet->getColumnDimension('B')->setWidth(8); $worksheet->getColumnDimension('C')->setWidth(8); $worksheet->getColumnDimension('D')->setWidth(8); $worksheet->getColumnDimension('E')->setWidth(8); $worksheet->getColumnDimension('F')->setWidth(12); $worksheet->getColumnDimension('G')->setWidth(12); $worksheet->getColumnDimension('H')->setWidth(12); $worksheet->getStyle('A1:H1')->getFont()->setBold(true); $worksheet->getStyle('A2:H'.$row)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); //輸出Excel文件 $filename = 'Station1_April_2021.xlsx'; header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$filename.'"'); header('Cache-Control: max-age=0'); $objwriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($excel, 'Xlsx'); $objwriter->save('php://output'); exit();
代碼解釋:
第1行:讀取txt文件到數(shù)組$lines中第4行:創(chuàng)建Excel文件對象$excel第5行:指定工作表$worksheet名稱第9-15行:寫入Excel表頭數(shù)據(jù)第17-25行:循環(huán)讀取$lines數(shù)組,解析數(shù)組中每行數(shù)據(jù),寫入Excel工作表中,并統(tǒng)計行數(shù)$row第28-35行:設置Excel列寬和文字排列格式第38-43行:瀏覽器正常輸出Excel下載文件
通過這個實例,我們可以輕松了解php excel的應用和使用方法,并在數(shù)據(jù)處理和交換中大大提高工作效率。在實際工作中,我們可以根據(jù)需要,進一步完善和優(yōu)化php excel的功能,如設置Excel單元格格式、添加注釋、增加圖表、操作Excel文件等。