PHPからExcelに表形式のデータを転送する簡単な方法

PHPでxlsを生成することに関する 1つの記事でこのトピックを書くように促されました。

そのメモに示されている方法は、実際には非常に単純ですが、常に便利であるとは限りません。

表形式のデータをPHPからExcelに転送する方法は他にもたくさんありますが、最も単純で機能的と思われる方法について説明します。 特に注意する必要があるのは、xlsファイルの生成についてではなく、Excelを使用して受信データを開くことを提案するだけで、プログラミングに不慣れなユーザーが偽造に気付かないようにすることです。



そのため、最初に行うことは、次のヘッダーを生成するスクリプトへのリンクをページに配置することです。

header("Pragma: public");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: private", false);

header("Content-Type: application/x-msexcel");

header("Content-Disposition: attachment; filename=\"" . iconv('UTF-8', 'CP1251', $object->getFileName()) . "\";");

header("Content-Transfer-Encoding: binary");

header("Content-Length: " . $object->getFileSize());







$ object-すべての読者が好きなように実装する真空中の球状のオブジェクト。 getFileName()およびgetFileSize()getterの目的は、名前から明らかです。 はっきりしないニュアンスを1つ強調する価値があります(これを思い出させてくれたsavostinに感謝します )-getFileName()は確かに任意のファイル名を返すことができますが、ブラウザーで受信したコンテンツをExcelで開くことを提供する場合、ファイル拡張子はxlsである必要があります。

私はまだ新しいことを何も話していないが、これはすべて私の前で発明されたものであり、以下で説明するものもそうだ。

PHPでのxls生成に関する記事のコメントに正しく記載されているように、ExcelはXMLではるかに高速に動作します。 しかし、おそらく最も重要な利点は、おそらく速度ではなく、はるかに広い可能性にあります。 ジャングルに深く入り込むのではなく、簡単な例を示し、すべてのタグの詳細な説明へのリンクを示します。



そのため、ヘッダーが生成された後、ユーザーに実際のデータを提供する必要があります。 通常、テーブル生成は別の方法でラップします。

echo $object->getContent();







また、Smartyを使用してテーブルが生成されます。

 <?xml version = "1.0"?>
 <?mso-application progid = "Excel.Sheet"?>
 <Workbook xmlns = "urn:schemas-microsoft-com:office:sh​​eetsheet" xmlns:o = "urn:schemas-microsoft-com:office:office" xmlns:x = "urn:schemas-microsoft-com:office:excel "xmlns:ss =" urn:schemas-microsoft-com:office:スプレッドシート "xmlns:html =" http://www.w3.org/TR/REC-html40 ">
	 <スタイル>
  		 <Style ss:ID = "bold">
			 <Font ss:太字= "1" />
		 </スタイル>
 	 </スタイル> 
	 <Worksheet ss:Name = "WorksheetName">
		 <表>
			 <行>
				 {foreach from = $ data.header item = caption}
					 <Cell ss:StyleID = "bold"> <Data ss:Type = "String"> {$ caption.columnName} </ Data> </ Cell>
				 {/ foreach}
			 </行> 
			 {foreach from = $ data.content item = row}	
				 <行>
					 {foreach from = $ row item = col}
						 <Cell> <Data ss:Type = "String"> {$ col} </ Data> </ Cell>
					 {/ foreach}
				 </行>
			 {/ foreach}
		 </表>
	 </ワークシート>
 </ワークブック>


コードからわかるように、2つの配列を含む$データ配列がテンプレートに送信されます-テーブルヘッダー行とデータ自体。

XMLを生成するためだけにテンプレートエンジンを使用するのはやや高価であり、他の多くの方法でXMLを取得できることに注意してください。 私の特定のケースでは、XML生成は、テンプレートエンジンが不可欠な大規模プロジェクトの単なる小さなパンです。



例として、単純なテーブルを示しました。必要に応じて、はるかに多くの属性を操作できます。 これは、実装にサードパーティのライブラリは必要ないと考える場合に特に便利です。

説明されている方法は、数年前から単一のプロジェクトで機能しており、開いているデータがMS Officeドキュメントではないと疑うユーザーはまだいません。



MS Excelで使用されるXML構造の詳細については、 MSDN XMLスプレッドシートリファレンスを参照してください。



All Articles