オリジナル著者: Podcast on the Iceberg この記事を見たとき、私たちは日常生活でいくつか使用していますが、著者がすべてをリストしているわけではありません。ライブラリ、パックヘッダーも使用しましたし、csv はもちろんのこと、smarty を使用して単純に xml を置き換えるものも使用しました。ふふ。 (COM メソッドについては説明しません。読みやすいものが多すぎます。wps を使用して Word を生成する記事なども書きました。)
しかし、読んでいるときに、1 つしか使用しなかったので、それが何であるかを忘れたので、戻ってコードを読む必要がありました。借り物主義なので覚えられません。
元のアドレス: http://xinsync.xju.edu.cn/index.php/archives/3858
元のコンテンツ:
最近、プロジェクトのニーズにより、システム内の一部のデータを Excel にエクスポートし、変更してからシステムにインポートし直すモジュールを開発する必要がありました。機会があったのでこれについて調べてみましたので、いくつかまとめてみました。
基本的に、エクスポートされるファイルには次の 2 種類があります。
1: Excel に似た形式。これは、Excel に強い互換性があり、正しく開くことができるためです。この種のファイルを変更して保存すると、通常、ファイルを Excel ファイルに変換するかどうかを尋ねるメッセージが表示されます。
利点: シンプル。
欠点: インポートに使用する場合、フォーマットの生成が困難です。対応するプログラムを自分で記述する必要があります。
2: Excel 形式、Excel に相当し、この方法で生成されたファイルは実際の Excel 形式に近いです。
中国語をエクスポートするときに文字化けが発生する場合は、文字列を gb2312 に変換してみてください。たとえば、次のコマンドは $yourStr を utf-8 から gb2312 に変換します。
$yourStr = mb_convert_encoding("gb2312", "UTF-8", $yourStr);
いくつかのメソッドの詳細を以下に示します。
1. PHP を Excel にエクスポート
1: 最初の推奨事項は、非常に人気のある PHPExcel です。公式 Web サイト: http://www.codeplex.com/PHPExcel
インポートとエクスポートが可能で、2003 と互換性のある Office 2007 形式にエクスポートすることもできます。
ダウンロードしたパッケージにはドキュメントとサンプルが含まれており、自分で学習できます。
段落をコピーする例を次に示します。
PHPコード
<?php
/**
* PHPエクセル
*
* 著作権 (C) 2006 - 2007 PHPExcel
*
* このライブラリはフリー ソフトウェアです。再配布したり、再配布したりすることができます。
* GNU Lesser General Public の規約に基づいて変更してください
* Free Software Foundation によって発行されたライセンス。
* ライセンスのバージョン 2.1、または (オプションで) それ以降のバージョン。
*
※このライブラリは、皆様のお役に立つことを願って配布しておりますが、
* ただし、いかなる保証もありません。
* 商業性または特定の目的への適合性については、GNU を参照してください。
* 詳細については、劣等一般公衆利用許諾書を参照してください。
*
* GNU Lesser General Public のコピーを受け取っているはずです
* このライブラリと一緒にライセンスを取得しない場合は、フリー ソフトウェアに書き込みます。
* Foundation, Inc.、51 Franklin Street、5 階、ボストン、マサチューセッツ州 02110-1301 米国
*
* @category PHPExcel
* @パッケージPHPExcel
* @copyright 著作権 (c) 2006 - 2007 PHPExcel ( http://www.codeplex.com/PHPExcel )
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @バージョン 1.5.0、2007-10-23
*/
/** エラー報告 */
エラー報告(E_ALL);
/** パスを含める **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');
/** PHPExcel */
「PHPExcel.php」をインクルードします。
/** PHPExcel_Writer_Excel2007 */
「PHPExcel/Writer/Excel2007.php」をインクルードします。
// 新しい PHPExcel オブジェクトを作成します
echo date('H:i:s') ” 新しい PHPExcel オブジェクトを作成しますn”;
$objPHPExcel = 新しい PHPExcel();
// プロパティを設定する
echo date('H:i:s') ” プロパティを設定しますn”;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy(”Maarten Balliauw”);
$objPHPExcel->getProperties()->setTitle(”Office 2007 XLSX テスト ドキュメント”);
$objPHPExcel->getProperties()->setSubject(”Office 2007 XLSX テスト ドキュメント”);
$objPHPExcel->getProperties()->setDescrīption("PHP クラスを使用して生成された Office 2007 XLSX のテスト ドキュメント。");
$objPHPExcel->getProperties()->setKeywords(”office 2007 openxml php”);
$objPHPExcel->getProperties()->setCategory(”テスト結果ファイル”);
// データを追加します
echo date('H:i:s') ” データを追加しますn”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');
// シートの名前を変更
echo date('H:i:s') ” シートの名前を変更しますn”;
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// アクティブ シート インデックスを最初のシートに設定すると、Excel はこれを最初のシートとして開きます
$objPHPExcel->setActiveSheetIndex(0);
// Excel 2007 ファイルを保存
echo date('H:i:s') ” Excel2007 形式に書き込みますn”;
$objWriter = 新しい PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// エコー完了
echo date('H:i:s') ” ファイルの書き込みが完了しました。rn”;
2. pear の Spreadsheet_Excel_Writer クラスのダウンロード アドレスを使用します: http://pear.php.net/package/Spreadsheet_Excel_Writer
このクラスは OLE に依存します。ダウンロード アドレス: http://pear.php.net/package/OLE
エクスポートされた Excel ファイルの形式は比較的古いため、変更後に保存すると、新しい形式に変換するかどうかを確認するメッセージが表示されます。
ただし、形式を設定することはできます。これは非常に強力です。
PHPコード
<?php
require_once 'スプレッドシート/Excel/Writer.php';
// ワークブックを作成する
$workbook = 新しいスプレッドシート_Excel_Writer();
// HTTPヘッダーの送信
$workbook->send('test.xls');
// ワークシートの作成
$worksheet =& $workbook->addWorksheet('最初のワークシート');
//実際のデータ
$worksheet->write(0, 0, '名前');
$worksheet->write(0, 1, '年齢');
$worksheet->write(1, 0, 'ジョン・スミス');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'ヨハン・シュミット');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'フアン エレーラ');
$worksheet->write(3, 1, 32);
// ファイルを送信しましょう
$workbook->close();
?>
3: Smarty を使用して、Excel 仕様に準拠した XML または HTML ファイル サポート形式を生成します。これは完璧なエクスポート ソリューションです。ただし、エクスポートされたファイルは基本的に XML ファイルであり、インポートに使用する場合は、個別に処理する必要があります。
詳細については、rardge hero の投稿を参照してください: http://bbs.chinaunix.net/viewthread.php?tid=745757
エクスポートされたテーブルの行数が不確実な場合は、テンプレート内の「ss:」: ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″” などを削除します。
4. パック関数を使用して、Excel 形式をシミュレートする文区切り記号を印刷します。これは、Office 2003 で変更して保存した後は、プロンプトが表示されなくなります。
欠点はフォーマットがないことです。
PHPコード
<?php
// ヘッダーを送信
header("プラグマ: public");
header("有効期限: 0");
header("キャッシュ制御: 必須再検証、事後チェック = 0、事前チェック = 0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header(”Content-Disposition:attachment;filename=test.xls”);
header("コンテンツ転送エンコーディング: バイナリ ");
//XLS データセル
xlsBOF();
xlsWriteLabel(1,0,"私の Excel 行 1");
xlsWriteLabel(2,0,"私の Excel 行 2: ");
xlsWriteLabel(2,1,"皆さんこんにちは");
xlsEOF();
関数 xlsBOF() {
エコーパック("ssssss", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
戻る;
}
関数 xlsEOF() {
エコーパック("ss", 0×0A, 0×00);
戻る;
}
function xlsWriteNumber($Row, $Col, $Value) {
エコーパック("sssss", 0×203, 14, $Row, $Col, 0×0);
エコーパック("d", $Value);
戻る;
}
function xlsWriteLabel($Row, $Col, $Value) {
$L = strlen($Value);
echo Pack("ssssss", 0×204, 8 + $L, $Row, $Col, 0×0, $L);
エコー $Value;
戻る;
}
?>
しかし、作者が64ビットLinuxシステムで使用したところ失敗し、文区切り記号がすべて文字化けしてしまいました。
5. タブと改行の使い方
タブ文字「t」を使用すると、同じ行内の列を区切ることができ、改行文字「tn」を使用すると次の行を開くことができます。
<?php
header("Content-Type: application/vnd.ms-execl");
header("Content-Disposition:attachment; filename=myExcel.xls");
header("プラグマ: キャッシュなし");
header("有効期限: 0");
/*最初の行*/
echo "こんにちは"."t";
「世界」をエコーします。"t";
エコー「tn」;
/*2 行目の始まり*/
echo "これは 2 行目です"."t";
echo "こんにちは、かわいい女の子"。"t";
エコー「tn」;
?>
6.comを利用する
PHP で com モジュールを開くことができる場合は、それを使用して Excel ファイルをエクスポートできます。
PHPコード
<?PHP
$filename = “c:/spreadhsheet/test.xls”;
$sheet1 = 1;
$sheet2 = "sheet2";
$excel_app = new COM("Excel.application") または Die ("接続しませんでした");
print "アプリケーション名: {$excel_app->アプリケーション->値}n";
print "読み込まれたバージョン: {$excel_app->アプリケーション->バージョン}n";
$Workbook = $excel_app->Workbooks->Open(”$filename”) または Die(”$filename $Workbook を開けませんでした”);
$Worksheet = $Workbook->ワークシート($sheet1);
$Worksheet->アクティブ化;
$excel_cell = $Worksheet->Range(”C4”);
$excel_cell->アクティブ化;
$excel_result = $excel_cell->値;
「$excel_resultn」を印刷します。
$Worksheet = $Workbook->ワークシート($sheet2);
$Worksheet->アクティブ化;
$excel_cell = $Worksheet->Range(”C4”);
$excel_cell->アクティブ化;
$excel_result = $excel_cell->値;
「$excel_resultn」を印刷します。
#Excel のすべてのインスタンスを閉じるには:
$ワークブック->閉じる;
unset($Worksheet);
unset($Workbook);
$excel_app->ワークブック->Close();
$excel_app->Quit();
unset($excel_app);
?>
より良い例: http://blog.chinaunix.net/u/16928/showart_387171.html
1. Excel への PHP インポート
1: PHPExcel を引き続き使用します。公式 Web サイト: http://www.codeplex.com/PHPExcel 。
2: PHP-ExcelReader を使用します。ダウンロード アドレス: http://sourceforge.net/projects/phpexcelreader
例:
PHPコード
<?php
require_once 'Excel/reader.php';
// ExcelFile($filename, $encoding);
$data = 新しいスプレッドシート_Excel_Reader();
// 出力エンコーディングを設定します。
$data->setOutputEncoding('utf8');
$data->read('jxlrwtest.xls');
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->sheets[0]['cells'][$i][$j]."",";
}
エコー「n」;
}
?>
----------
このサイトは、帰属、非営利、一貫性を要求するクリエイティブ コモンズ著作権契約を採用しています。このサイトは非営利の転載を歓迎しますが、それが「太っちょおじさんのシンプル ライフ」からのものであることを示し、元のリンクを保持する必要があります。元のタイトルとリンクを示します。