ホームページ php教程 php手册 Thinkphp は PHPExcel を使用して Excel をインポートします

Thinkphp は PHPExcel を使用して Excel をインポートします

Aug 29, 2016 am 08:36 AM

PHPExcel (百科事典: Microsoft の OpenXML 標準と PHP 言語に基づいて、Office Excel ドキュメントを操作するために使用される PHP クラス ライブラリ) を使用して、簡単な Excel インポートを作成しました

さて、もうやめましょう...

まずはあなたPHPExcel クラス ライブラリが必要です。ここをクリックして https://github.com/Zmwherein/PHPExcel.git をダウンロードします

次に、それを ThinkPHPLibraryVendor に置きます (個人的な好みで、インポートするだけです)

以下に示すように:

PHPExcel.phpエントリーファイルに似ています。そこに書かれたメソッドがどのように実行されるかを確認できます...

これがインターフェースです:

まず、ファイルがアップロードされているかどうかを判断しましょう(実際には)。 、ここのものはまだ機能するはずです)最適化してより良く書くことができますが、当面は私の個人的な能力には限界があります)


 1 public function import() 
 2     { 
 3         // p($data_in_db); 
 4         if ( ! empty($_FILES)) 
 5         { 
 6             $upload = new \Think\Upload(); 
 7             $upload -> maxSize   =  3145728 ; 
 8             $upload -> exts      =  array('xlsx', 'xls'); 
 9             $upload -> rootPath  =  './'; // 设置附件上传根目录
 10             $upload  -> savePath =  '/Upload/excel/'; // 设置附件上传(子)目录
 11             $upload -> subName   =  false;
 12             $upload -> saveName  =  'time';
 13             
 14             $info   =   $upload -> uploadOne($_FILES['import']);
 15             
 16             if( ! $info)
 17             {
 18                 $this->error($upload->getError());
 19             }
ログイン後にコピー


次に、2つのファイルPHPExcel.phpとPHPExcel/IOFactoryを実行してインポートしました.php


1 //导入PHPExcel 和 IOFactory类
2 Vendor('PHPExcel.PHPExcel');
3 Vendor('PHPExcel.PHPExcel.IOFactory');
ログイン後にコピー


インポートなのでcreateReaderメソッドを呼び出します


$objReader = \PHPExcel_IOFactory::createReader('Excel5');
ログイン後にコピー


アップロードされたファイルがどこにあるか、つまりロードするパスを設定しますファイル


$objPHPExcel = $objReader -> load($file_path, $encode='utf-8');
ログイン後にコピー


ここで話しているのは、A から E までの走査される行数です (自分で定義し、好きな方を選択してください) 最初の行は 2 から始める必要があります。はヘッダーであり、データではありません


 1 $sheet = $objPHPExcel -> getSheet(0);
 2             $highestRow = $sheet -> getHighestRow(); // 取得总行数 
 3             // p($highestRow); 
 4             // $highestColumn = $sheet->getHighestColumn(); // 取得总列数 
 5              
 6             for($i=2;$i<=$highestRow;$i++) 
 7             { 
 8     $data['user_name'] = $objPHPExcel -> getActiveSheet() -> getCell("A".$i)->getValue(); 
 9     $data['company']   = $objPHPExcel -> getActiveSheet() -> getCell("B".$i)->getValue();
 10    $data['mobile']    = $objPHPExcel -> getActiveSheet() -> getCell("C".$i)->getValue();
 11     $data['category']  = $objPHPExcel -> getActiveSheet() -> getCell("D".$i)->getValue();
 12    $data['mark']      = $objPHPExcel -> getActiveSheet() -> getCell("E".$i)->getValue();
 13                 
 14                 $allData[] = $data;
 15             }
 16             // p($allData);
ログイン後にコピー


テストテーブルは次のようになります

$allDataを出力して確認してください

ほら、データが出てきました...

次のステップは、それをデータベースにインポートすることです - >たとえば、データベース内の電話番号がインポートしたいデータと同じかどうかを判断する必要があります。インポート、このようなものはインポートしたくないです -> 誰かより良い方法を持っていますか


 1  if (empty($allData)) 
 2             { 
 3                 $this -> error(C('MESSAGE.ERROR_NODATA')); 
 4             } 
 5             $data_in_db = M('Excel') -> field('mobile') -> select();//表Excel里所有数据 
 6             foreach ($data_in_db as $key => $val) 
 7             { 
 8                 foreach ($allData as $k => $v) 
 9                 {
 10                     if ($val['mobile'] == $v['mobile'])
 11                     {
 12                         unset($allData[$k]);
 13                     }
 14                 }
 15             }
ログイン後にコピー


インポートするとき、2つの方法があります: 1つはSQLを結合することであり、もう1つはforeach ループを使用してインポートします

最初の方法の方がはるかに高速です!!! SQL を結合してインポートすることを強くお勧めします...ただし、インポートされたデータが大きすぎて、結合された SQL が非常に長くなる場合があります。データは比較的大きくなります...

場合によっては、実行ファイルのタイムアウト エラーが報告されるか、「1153 – ‘max_allowed_pa​​cket」バイトを超えた場合、または

このようなエラーが報告されます。

この場合、my.ini の max_allowed_pa​​cket を変更して少し大きく設定する必要があります。MySql を再起動します

OK.. しばらく待つと、ほぼ 2W のデータがインポートされます (^_^)

上記は私が書いた挿入ステートメントです


 1 $sql = "INSERT INTO `db_excel` (". implode(',',array_keys($allData[0])) .") VALUES "; 
 2             foreach ($allData as $key => $val) 
 3             { 
 4                 $sql .= "("; 
 5                 $sql .= "'".implode("','", $val)."'"; 
 6                 $sql .= "),"; 
 7             } 
 8             $sql = rtrim($sql,','); 
 9             // 出错返回false 否则返回成功行数
 10             $res = D('Excel') -> execute($sql);
 11             if ($res === false)
 12             {
 13                 $this -> error(C('MESSAGE.ERROR_IMPORT'));
 14             }
 15             else if ($res > 0)
 16             {
 17                 $this -> success(C('MESSAGE.SUCCESS_IMPORT'), U('Excel/index'));
 18             }
 19             else if ($res === 0)
 20             {
 21                 $this -> success(C('MESSAGE.SUCCESS_IMPORT_0'), U('Excel/index'));
 22             }
ログイン後にコピー


上記は Excel ファイルをインポートするための PHPExcel の使用方法です

まだ多くの欠点がありますが、よろしくお願いします。

上記は、PHPExcel を使用して Excel をインポートする Thinkphp の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。



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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Excelで3つ以上のキーワードを同時にフィルタリングする方法 Excelで3つ以上のキーワードを同時にフィルタリングする方法 Mar 21, 2024 pm 03:16 PM

Excelで3つ以上のキーワードを同時にフィルタリングする方法

Excelで印刷時に枠線が消えてしまった場合はどうすればよいですか? Excelで印刷時に枠線が消えてしまった場合はどうすればよいですか? Mar 21, 2024 am 09:50 AM

Excelで印刷時に枠線が消えてしまった場合はどうすればよいですか?

Excelテーブル互換モードを通常モードに変更する方法 Excelテーブル互換モードを通常モードに変更する方法 Mar 20, 2024 pm 08:01 PM

Excelテーブル互換モードを通常モードに変更する方法

Excelの読み取りモードを設定する場所 Excelの読み取りモードを設定する場所 Mar 21, 2024 am 08:40 AM

Excelの読み取りモードを設定する場所

Excelで上付き文字を設定する方法 Excelで上付き文字を設定する方法 Mar 20, 2024 pm 04:30 PM

Excelで上付き文字を設定する方法

エクセルでiif関数を使う方法 エクセルでiif関数を使う方法 Mar 20, 2024 pm 06:10 PM

エクセルでiif関数を使う方法

ExcelデータをHTMLで読み込む方法 ExcelデータをHTMLで読み込む方法 Mar 27, 2024 pm 05:11 PM

ExcelデータをHTMLで読み込む方法

ExcelアイコンをPPTスライドに挿入する方法 ExcelアイコンをPPTスライドに挿入する方法 Mar 26, 2024 pm 05:40 PM

ExcelアイコンをPPTスライドに挿入する方法

See all articles