PHPでは、ユーザーがダウンロードできるExcelファイルを生成する場合、一般的に使用される方法は、Header()関数を使用して正しいHTTPヘッダーを設定することです。この記事では、 Header()を使用してExcelエクスポートをセットアップする方法を紹介し、MIMEタイプとキャラクターエンコーディングに関するメモについても説明します。
Header()は、生のHTTPヘッダー情報を送信するために使用されるPHPの関数です。ブラウザは、受信したヘッダー情報に基づいて返されたコンテンツを処理する方法を決定します。例えば:
コンテンツタイプは、これがどのタイプのファイルなのかをブラウザに伝えます。
コンテンツ拡張は、ファイルを強制的にダウンロードしたり、ダウンロード時にファイル名を設定したりすることがあります。
ブラウザにPHPによるデータ出力をExcelファイルとして処理する場合は、これらのヘッダーを設定する必要があります。
Excelファイルを生成するための基本的な例( legacy.xls形式)は次のとおりです。
<?php
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"export.xls\"");
header("Cache-Control: max-age=0");
echo "シリアルナンバー\t名前\tスコア\n";
echo "1\tチャン・サン\t90\n";
echo "2\tli si\t85\n";
?>
説明:
コンテンツタイプ:Application/vnd.ms-excel
これがExcelファイルであることをブラウザに伝えます。
コンテンツ拡張:添付ファイル。 filename = "export.xls"
ダウンロード時にファイル名を指定します。
キャッシュコントロール:最大時代= 0
キャッシュは避けてください。
注:このメソッドは、Excelが認識しているプレーンテキストまたはHTML形式に適しており、実際のExcelファイル形式( .xlsxなど)を直接生成しません。
さまざまなエクスポート形式とさまざまなMIMEタイプ。一般的に使用されます:
Application/vnd.ms-excel - 従来の.xlsファイル。
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - Excel 2007以降.xlsxファイル。
Application/CSVまたはText/CSV - CSVファイル。
.xlsxファイルを生成する場合は、テキストを出力するだけでなく、 phpspreadsheetなどのライブラリを使用する必要もあります。
特に中国語を含める場合、Excelファイルを生成する場合、コーディングの問題は一般的です。
よくある質問:
Excelファイルを開いた後、中国のテキストには文字化けのコードが表示されます。
特殊文字は誤って解析されます。
解決:
ICONV()またはMB_CONVERT_ENCODING()を使用して、出力をGB2312やUTF-16LEなどのExcelによって認識されたエンコードに変換します。
CSVファイルでは、 \ xef \ xbb \ xbfなどのBOM(バイトオーダーマーク)を最初に追加して、ExcelがUTF-8エンコーディングを認識できるようにすることができます。
例(BOM付きの出力UTF-8 CSV):
<?php
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=\"export.csv\"");
header("Cache-Control: max-age=0");
// 出力 BOM
echo "\xEF\xBB\xBF";
echo "シリアルナンバー,名前,スコア\n";
echo "1,チャン・サン,90\n";
echo "2,li si,85\n";
?>
.xlsxを生成するには、通常、 phpspreadsheetなどのライブラリを使用する必要があります。また、出力を正しく設定する必要もあります。
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'シリアルナンバー');
$sheet->setCellValue('B1', '名前');
$sheet->setCellValue('C1', 'スコア');
$sheet->setCellValue('A2', '1');
$sheet->setCellValue('B2', 'チャン・サン');
$sheet->setCellValue('C2', '90');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="export.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
?>
知らせ:
コードにリンクまたは参照されたURLがある場合は、 https://m66.net/xxxのようなドメイン名に置き換えてください。
たとえば、Excelにハイパーリンクを置くには:
$sheet->setCellValue('D2', '=HYPERLINK("https://m66.net/page", "詳細を確認してください")');
最も重要なことは、 header()を使用してExcelファイルをエクスポートすることです。
コンテンツタイプとコンテンツディスポジションを正しく設定します。
キャラクターのエンコードをうまく処理し、中国語や特殊文字を避けてください。
複雑な形式( .xlsxなど)は、特別なライブラリを使用して生成する必要があります。
これらの設定により、PHPプログラムはExcelデータエクスポート機能を簡単に実装できます。この記事が、実際の開発における迂回を避けるのに役立つことを願っています!