PHPExcel是一個強大的PHP類庫,用于生成和讀取Microsoft Excel格式的電子表格,但是在使用過程中會遇到中文亂碼的問題。
我們先看看一個例子:
$excel = new PHPExcel(); $excel->setActiveSheetIndex(0); $excel->getActiveSheet()->setCellValue('A1', '中文測試'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="filename.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $objWriter->save('php://output');
如果直接輸出生成的Excel文件,發現“中文測試”三個字在表格中變成了一串亂碼。這是因為Excel讀取Unicode編碼格式的字符,而PHP默認使用的是ANSI編碼,在處理中文字符時無法正確解析,造成了中文亂碼。
解決方法有兩種,一種是將PHP文件編碼設置為UTF-8,這種方式比較簡單,只需要加上下面一行代碼:
header('Content-Type: text/html;charset=utf-8');
這樣就可以正確輸出中文字符了。但如果在寫入Excel文件時,還是會出現中文亂碼問題。因為PHPExcel默認使用的是Windows的ANSI編碼格式,而不是Unicode編碼格式。
因此,第二種方法是使用PHPExcel的編碼轉換方法。通過將原來ANSI編碼的中文字符轉換成UTF-8編碼,再寫入Excel中,就能避免中文亂碼問題。
$excel = new PHPExcel(); $excel->setActiveSheetIndex(0); $excel->getActiveSheet()->setCellValue('A1', mb_convert_encoding('中文測試', 'utf-8', 'auto'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="filename.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $objWriter->save('php://output');
通過使用mb_convert_encoding方法將中文字符轉換成UTF-8編碼,在輸出Excel文件時就可以正常顯示了。
總之,在使用PHPExcel生成Excel文件的過程中,要特別注意中文亂碼問題。通過以上兩種方法,可以避免中文亂碼帶來的麻煩。