phpexcelを使ってExcelの文字化けをエクスポートする

WBOY
リリース: 2016-06-23 13:54:36
オリジナル
1429 人が閲覧しました

データベースとページは両方とも utf8 です。
header('Content-Type: application/vnd.ms-excel;');
header('Content-Disposition:attachment;filename='.$filename.'.xls');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
エクスポート後、execel を開きます。文字化けしています。
ローカルウィンドウでエクスポートする場合は問題ないのですが、サーバーにアップロードしてエクスポートすると文字化けします。
var_dump($objWreter)をページに直接実行して文字化けがないことを確認します。
header('Content-Type: application/vnd.ms-excel;charset=gb2312') はまだ文字化けしています;
この文字化けしたコードの問題は何ですか?

ディスカッションに返信 (解決策)

追加header() の前に ob_end_clean() 関数を使って文字化けをなくすためにバッファをクリアします

ob_end_clean();//文字化けを避けるためにバッファをクリアします

header('Content-Type: application/vnd .ms-excel');
. ....
..

$objWriter->save('php://output'); 出力は図のようにバイナリ ドキュメント ストリームです。文字セットに問題はありません

Excelを使用して開きます ファイルに認識できない内容が含まれているため、文字化けが表示されます

これにはおそらくphpエラーメッセージが含まれています
スクリーンショットを撮って投稿して確認することもできます。ネットワークディスク上のxlsファイル

in header()の前にob_end_clean()関数を追加して文字化けしないようにバッファをクリアします

ob_end_clean();//文字化けを避けるためにバッファをクリアします

header('Content-Type: application/vnd.ms-excel ');
.....
.....


これが問題です、バッファが損傷するはずはありません

$objWriter- >save('php://output'); 出力 画像の通りバイナリドキュメントストリームですが、Excelで開くと文字化けが発生します。これはおそらく PHP からのエラー メッセージです。写真を投稿して確認してください。xls ファイルをネットワーク ディスクに保存することもできます。ob_end_clean を追加します。 header() の前に () 関数を追加して文字化けをなくすためにバッファをクリアします。

ob_end_clean();//文字化けを避けるためにバッファをクリアします

header('Content-Type: application/vnd.ms -excel');
.....
.....



これは確かに問題です、傷つけることのできないバッファです
それは役に立ちません、残念ながら、ローカルテストに使用しました。ローカルのものは大丈夫ですが、あなたは不注意です

A1 セルの内容が間違っています
冗長な出力がないか確認してください

上位コードと下位コード
/*--------------ヘッダー情報の設定------*/
$objPHPExcel-> ; setActiveSheetIndex(0)
「c」)
-> setCellValue('D1', 'd')

--- -----------開始データベースから情報を抽出し、Excel テーブルに挿入します-----------------*/
$i=2 // i 変数を定義します。目的は次のとおりです。ループ出力データの行数を制御します
for($j=0;$j // $rm = iconv("GB2312","UTF-8 ",$ rs[1]); //文字をエンコードし、データベース内の GB2312 中国語文字を UTF-8 形式に変換します
$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue("A".$i , $ result [$ j] [ori_stu_candidatenum '])、$ j] [' ori_stu_sex ']、$ result ----------以下はその他の情報の設定です---------------*/
$objPHPExcel->getActiveSheet()->setTitle; ('Student Sheet'); // シートの名前を設定します
$objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition:attachment;filename='.$filename.'.xls');
header(' Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); // ここで生成 Excel がポップアップ表示されます


A1 セルの内容が間違っているかどうかを確認してください冗長な出力


コーディングさせてください

Vendor("Excel.PHPExcel");            Vendor("Excel.PHPExcel.IOFactory");             $objPHPExcel = new PHPExcel();               $db=M("student_info");            $where="where fsi_logistics.ori_log_stuCandidateNum = fsi_student_info.ori_stu_candidateNum";            $sql="select logistics.*,student_info.ori_stu_name  from student_info,logistics ".$where;			$result= $db->query($sql); 			$objPHPExcel->setActiveSheetIndex(0)			            ->setCellValue('A1', '姓名')			            ->setCellValue('B1', '考生号')			            ->setCellValue('C1', '商品')			            ->setCellValue('D1', '价格');			$i=2;			for($j=0;$j<count($result);$j++){						  $objPHPExcel->setActiveSheetIndex(0)			            ->setCellValue("A".$i, $result[$j]['ori_stu_name'])			            ->setCellValue("B".$i, $result[$j]['ori_log_stuCandidateNum'])			            ->setCellValue("C".$i, $result[$j]['product'])			            ->setCellValue("D".$i, $result[$j]['price']);         			            $i++;			 }					$objPHPExcel->getActiveSheet()->setTitle('学生表'); 			$objPHPExcel->setActiveSheetIndex(0);   			$filename = date('Y-m',time())."生活用品表";			ob_end_clean() ;            header('Content-Type: application/vnd.ms-excel');            header('Content-Disposition: attachment;filename='.$filename.'.xls');            header('Cache-Control: max-age=0');            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');            $objWriter->save('php://output');            exit;   
ログイン後にコピー

他の出力はありません。window でエクスポートするのが普通です

bom の問題が解決しました、ありがとう

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート