ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してExcelドキュメントをインポートおよびエクスポートする方法のまとめ

PHPを使用してExcelドキュメントをインポートおよびエクスポートする方法のまとめ

WBOY
WBOYオリジナル
2016-06-20 13:01:411039ブラウズ

最近、プロジェクトのニーズにより、システム内の一部のデータを PHP を使用して Excel にエクスポートし、変更後にシステムにインポートし直すモジュールを開発する必要がありました。機会があったのでこれについて調べてみましたので、いくつかまとめてみました。

基本的に、エクスポートされるファイルには次の 2 種類があります:

1: Excel に似た形式。これは実際には、従来の意味での 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

インポートとエクスポートが成功し、Office 2007 形式でエクスポートでき、2003 と互換性があります。

ダウンロードしたパッケージには、自分で学習できるドキュメントと例が含まれています。

段落をコピーする例:

<?php   
/**  
* PHPExcel  
*  
* Copyright (C) 2006 - 2007 PHPExcel  
*  
* This library is free software; you can redistribute it and/or  
* modify it under the terms of the GNU Lesser General Public  
* License as published by the Free Software Foundation; either  
* version 2.1 of the License, or (at your option) any later version.  
*  
* This library is distributed in the hope that it will be useful,  
* but WITHOUT ANY WARRANTY; without even the implied warranty of  
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  
* Lesser General Public License for more details.  
*  
* You should have received a copy of the GNU Lesser General Public  
* License along with this library; if not, write to the Free Software  
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  
*  
* @category   PHPExcel  
* @package    PHPExcel  
* @copyright  Copyright (c) 2006 - 2007 PHPExcel (http://www.codeplex.com/PHPExcel)  
* @license    http://www.gnu.org/licenses/lgpl.txt    LGPL  
* @version    1.5.0, 2007-10-23  
*/
                         
/** Error reporting */
error_reporting(E_ALL);   
                         
/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . ‘../Classes/’);   
                         
/** PHPExcel */
include ‘PHPExcel.php’;   
                         
/** PHPExcel_Writer_Excel2007 */
include ‘PHPExcel/Writer/Excel2007.php’;   
                         
// Create new PHPExcel object   
echo date(’H:i:s’) . ” Create new PHPExcel object\n”;   
$objPHPExcel = new PHPExcel();   
                         
// Set properties   
echo date(’H:i:s’) . ” Set properties\n”;   
$objPHPExcel->getProperties()->setCreator(”Maarten Balliauw”);   
$objPHPExcel->getProperties()->setLastModifiedBy(”Maarten Balliauw”);   
$objPHPExcel->getProperties()->setTitle(”Office 2007 XLSX Test Document”);   
$objPHPExcel->getProperties()->setSubject(”Office 2007 XLSX Test Document”);   
$objPHPExcel->getProperties()->setDescrīption(”Test document for Office 2007 XLSX, generated using PHP classes.”);   
$objPHPExcel->getProperties()->setKeywords(”office 2007 openxml php”);   
$objPHPExcel->getProperties()->setCategory(”Test result file”);   
                         
// Add some data   
echo date(’H:i:s’) . ” Add some data\n”;   
$objPHPExcel->setActiveSheetIndex(0);   
$objPHPExcel->getActiveSheet()->setCellValue(’A1′, ‘Hello’);   
$objPHPExcel->getActiveSheet()->setCellValue(’B2′, ‘world!’);   
$objPHPExcel->getActiveSheet()->setCellValue(’C1′, ‘Hello’);   
$objPHPExcel->getActiveSheet()->setCellValue(’D2′, ‘world!’);   
                         
// Rename sheet   
echo date(’H:i:s’) . ” Rename sheet\n”;   
$objPHPExcel->getActiveSheet()->setTitle(’Simple’);   
                         
// Set active sheet index to the first sheet, so Excel opens this as the first sheet   
$objPHPExcel->setActiveSheetIndex(0);   
                         
// Save Excel 2007 file   
echo date(’H:i:s’) . ” Write to Excel2007 format\n”;   
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);   
$objWriter->save(str_replace(’.php’, ‘.xlsx’, __FILE__));   
                         
// Echo done   
echo date(’H:i:s’) . ” Done writing file.\r\n”;

2. pear の Spreadsheet_Excel_Writer クラスを使用する

ダウンロードアドレス: http://pear.php.net/package/Spreadsheet_Excel_Writer

このクラスは OLE に依存します。ダウンロード アドレス: http://pear.php.net/package/OLE

エクスポートされた Excel ファイルの形式は比較的古いことに注意してください。変更後、保存時に新しい形式に変換するかどうかを確認するメッセージが表示されます。

しかし、非常に強力なフォーマットを設定することができます。

<?php   
require_once ‘Spreadsheet/Excel/Writer.php’;   
                         
// Creating a workbook   
$workbook = new Spreadsheet_Excel_Writer();   
                         
// sending HTTP headers   
$workbook->send(’test.xls’);   
                         
// Creating a worksheet   
$worksheet =& $workbook->addWorksheet(’My first worksheet’);   
                         
// The actual data   
$worksheet->write(0, 0, ‘Name’);   
$worksheet->write(0, 1, ‘Age’);   
$worksheet->write(1, 0, ‘John Smith’);   
$worksheet->write(1, 1, 30);   
$worksheet->write(2, 0, ‘Johann Schmidt’);   
$worksheet->write(2, 1, 31);   
$worksheet->write(3, 0, ‘Juan Herrera’);   
$worksheet->write(3, 1, 32);   
                         
// Let’s send the file   
$workbook->close();   
?>

3. Smarty を使用して Excel 仕様に準拠した XML または HTML ファイルを生成します

フォーマットをサポートしており、完璧なエクスポート ソリューションです。ただし、エクスポートされたファイルは基本的に XML ファイルであり、インポートに使用する場合は、個別に処理する必要があります。

エクスポートされたテーブルの行数が不確かな場合は、テンプレート内の「ss:ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″」などを削除することをお勧めします。

4. Excel 形式をシミュレートする文区切り記号を印刷するには、パック関数を使用します。これは、Office 2003 で変更して保存した後は、プロンプトが表示されなくなります。 。

欠点は、フォーマットがないことです。

<?php   
// Send Header   
header(”Pragma: public”);   
header(”Expires: 0″);   
header(”Cache-Control: must-revalidate, post-check=0, pre-check=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(”Content-Transfer-Encoding: binary “);   
// XLS Data Cell   
                       
xlsBOF();   
xlsWriteLabel(1,0,”My excel line one”);   
xlsWriteLabel(2,0,”My excel line two : “);   
xlsWriteLabel(2,1,”Hello everybody”);   
                       
xlsEOF();   
                       
function xlsBOF() {   
echo pack(”ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);   
return;   
}   
function xlsEOF() {   
echo pack(”ss”, 0×0A, 0×00);   
return;   
}   
function xlsWriteNumber($Row, $Col, $Value) {   
echo pack(”sssss”, 0×203, 14, $Row, $Col, 0×0);   
echo pack(”d”, $Value);   
return;   
}   
function xlsWriteLabel($Row, $Col, $Value ) {   
$L = strlen($Value);   
echo pack(”ssssss”, 0×204, 8 + $L, $Row, $Col, 0×0, $L);   
echo $Value;   
return;   
}   
?>

しかし、作者は64ビットLinuxシステムで使用したところ失敗し、文の区切り記号がすべて文字化けしてしまいました。

5. タブ文字と改行の使い方

タブ文字「t」を使用すると同じ行内の列を分割でき、改行文字「tn」を使用すると次の行を開くことができます。

<?php   
header(”Content-Type: application/vnd.ms-execl”);   
header(”Content-Disposition: attachment; filename=myExcel.xls”);   
header(”Pragma: no-cache”);   
header(”Expires: 0″);   
/*first line*/
echo “hello”.”\t”;   
echo “world”.”\t”;   
echo “\t\n”;   
                    
/*start of second line*/
echo “this is second line”.”\t”;   
echo “Hi,pretty girl”.”\t”;   
echo “\t\n”;   
?>

6. コムを使用します

PHP で com モジュールを開くことができる場合は、それを使用して Excel ファイルをエクスポートできます

<?PHP   
$filename = “c:/spreadhseet/test.xls”;   
$sheet1 = 1;   
$sheet2 = “sheet2″;   
$excel_app = new COM(”Excel.application”) or Die (”Did not connect”);   
print “Application name: {$excel_app->Application->value}\n” ;   
print “Loaded version: {$excel_app->Application->version}\n”;   
$Workbook = $excel_app->Workbooks->Open(”$filename”) or Die(”Did not open $filename $Workbook”);   
$Worksheet = $Workbook->Worksheets($sheet1);   
$Worksheet->activate;   
$excel_cell = $Worksheet->Range(”C4″);   
$excel_cell->activate;   
$excel_result = $excel_cell->value;   
print “$excel_result\n”;   
$Worksheet = $Workbook->Worksheets($sheet2);   
$Worksheet->activate;   
$excel_cell = $Worksheet->Range(”C4″);   
$excel_cell->activate;   
$excel_result = $excel_cell->value;   
print “$excel_result\n”;   
#To close all instances of excel:   
$Workbook->Close;   
unset($Worksheet);   
unset($Workbook);   
$excel_app->Workbooks->Close();   
$excel_app->Quit();   
unset($excel_app);   
?>

より良い例: http://blog.chinaunix.net/u/16928/showart_387171.html

2. PHP インポート Excel

1: PHPExcel を引き続き使用します (公式 Web サイト: http://www.codeplex.com/PHPExcel)。

2: PHP-ExcelReader を使用します。ダウンロード アドレス: http://sourceforge.net/projects/phpexcelreader

例:

<?php   
require_once ‘Excel/reader.php’;   
                 
// ExcelFile($filename, $encoding);   
$data = new Spreadsheet_Excel_Reader();   
                 
// Set output Encoding.   
$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].”\”,”;   
}   
echo “\n”;   
}   
                 
?>


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。