ThinkPHPがExcelファイルをアップロードしてMySQLデータベースにデータをインポートする例

4473 ワード

この記事では、主にPHPがExcelファイルをアップロードしてMySQLデータベースにデータをインポートした例について説明します.
最近Excelファイルを作ってデータベースにデータをインポートしています.ウェブサイトはもし大量にデータを挿入することを支持したいならば、1つのExcelファイルをアップロードすることができて、中のデータの内容を導入してMySQLデータベースの小さいプログラムに着きます.
使用するツール:
ThinkPHP:軽量級国産PHP開発フレームワーク.ThinkPHP公式サイトでダウンロードできます.
PHPExcel:Office ExcelドキュメントのPHPクラスライブラリで、マイクロソフトのOpenXML標準とPHP言語に基づいています.CodePlexの公式サイトでダウンロードできます.、
1.設計MySQLデータベースproduct
productデータベースの作成
CREATE DATABASE product DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Pro_の作成infoテーブル
CREATE TABLE pro_info(
pId int(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
pName varchar(20) NOT NULL,
pPrice float NOT NULL,
pCount float NOT NULL
);

2.プロジェクトの生成
まずThinkPHP同級ディレクトリの下にindexを新規作成する.phpファイル、プロジェクトHomeを生成する.


3.ファイルフォームのアップロード
Home/Toplフォルダの下にIndexフォルダを新規作成し、中にindexを新規作成します.htmlファイル

   

  
        
    
  
  
    


4./Home/Lib/Action/indexAction.class.phpではフォームのアップロードページの表示、Excelファイルのアップロード、Excelファイルのインポート方法を記述します(ThinkPHP/Extendの下に拡張パッケージがない場合は、ThinkPHP公式サイトでダウンロードし、拡張パッケージを解凍する必要があります)
display();
  }
   
  /**
   *   Excel  
   */
  public function upload() {
    //  ThinkPHP     
    import('ORG.Net.UploadFile');
    //      
    $upload = new UploadFile();
    //          200Kib
    $upload->mixSize = 2000000;
    //        
    $upload->allowExts = array('xls', 'xlsx', 'csv');
    //         /Home/temp 
    $upload->savePath = './Home/temp/';
    //         
    $upload->saveRule = '';
    //           
    $upload->uploadReplace = true;
    if (!$upload->upload()) {  //      ,      
      $this->error($upload->getErrorMsg());
    } else {  //    
      //        
      $info = $upload->getUploadFileInfo();
      //         
      $fileName = $info[0]['savename'];
      //   , $fileName     importExcel()  
      $this->redirect('Index/importExcel', array('fileName' => $fileName), 1, '    !');
    }
  }
   
  /**
   *
   *   Excel  
   */
  public function importExcel() {
    header("content-type:text/html;charset=utf-8");
    //  PHPExcel 
    vendor('PHPExcel');
    vendor('PHPExcel.IOFactory');
    vendor('PHPExcel.Reader.Excel5');
   
    //redirect      
    $fileName = $_GET['fileName'];
   
    //    
    $filePath = './Home/temp/' . $fileName . '.xlsx';
    //   PHPExcel 
    $PHPExcel = new PHPExcel();
    //   excel2007  excel,     ,           
    $PHPReader = new PHPExcel_Reader_Excel2007();
    if (!$PHPReader->canRead($filePath)) {
      $PHPReader = new PHPExcel_Reader_Excel5();
      if (!$PHPReader->canRead($filePath)) {
        echo 'no Excel';
        return;
      }
    }
   
    //  Excel  
    $PHPExcel = $PHPReader->load($filePath);
    //  excel          
    $sheet = $PHPExcel->getSheet(0);
    //       
    $allColumn = $sheet->getHighestColumn();
    //       
    $allRow = $sheet->getHighestRow();
    //        ,      
    for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
      //  B   
      $name = $PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue();
      //  C   
      $price = $PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue();
      //  D   
      $count = $PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue();
   
      $m = M('Info');
      $num = $m->add(array('pName' => $name, 'pPrice' => $price, 'pCount' => $count));
    }
    if ($num > 0) {
      echo "    !";
    } else {
      echo "    !";
    }
  }
   
}
?>