1. 程式人生 > >使用phpexcel解析Excel資料表並存儲到資料庫中全過程

使用phpexcel解析Excel資料表並存儲到資料庫中全過程

第一步:ThinkPHP中例項化上傳類獲取form表單提交的檔案(非ThinkPHP可以直接忽略第一步,直接看第二步)

HTML檔案核心程式碼

<form action="{:U('Question/add_excel_post')}" enctype="multipart/form-data" method="post">
<input type="file" name="excel_file" class="input">
<button class="btn btn-primary" type="submit">上傳</button>
</form>

PHP檔案接收上傳的核心程式碼

    $upload = new \Think\Upload();// 例項化上傳類
    $upload->maxSize   =     3145728 ;// 設定附件上傳大小
    $upload->exts      =     array('xls', 'xlsx');// 設定附件上傳型別
    $upload->rootPath  =      './'; // 設定附件上傳根目錄
    $upload->savePath  =      'Uploads/ExamPaper/'; // 設定附件上傳(子)目錄
    $upload->autoSub   =      false;//不自動生成子資料夾
    // 上傳單個檔案 
    $info   =   $upload->uploadOne($_FILES['excel_file']);

$info生成上傳資訊,並進行判斷,如果上傳成功,則拼接上傳到伺服器的檔案路徑及名稱

if(!$info){
        $this->error($upload->getError());
    }else{
        $file_puth = './'.$info['savepath'].$info['savename'];
            }

第二步:匯入ExcelPHP類庫,並對Excel表格進行查詢解析

ThinkPHP種,第三方類庫的存放檔案路徑是:ThinkPHP\Extend\Vendor內建類庫路徑常量為VENDOR_PATH .xls檔案與.xlax檔案的區別: 版本問題 ,XLSX是高版本。 07版以後的副檔名都是.xlsx ,是用新的基於XML的壓縮檔案格式取代了其目前專有的預設檔案格式,在傳統的檔名副檔名後面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等),使其佔用空間更小,可以向下相容xls。

在PHP檔案中匯入PHPExcel類庫,並對Excel表格進行解析:

require_once VENDOR_PATH.'PHPExcel_1/PHPExcel/IOFactory.php';
require_once VENDOR_PATH.'PHPExcel_1/PHPExcel.php';
//判斷檔案版本,選擇對應的解析檔案
if($info['ext']=='xlsx'){
    require_once VENDOR_PATH.'PHPExcel_1/PHPExcel/Reader/Excel2007.php';
    $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
        }else{
    require_once VENDOR_PATH.'PHPExcel_1/PHPExcel/Reader/Excel5.php';
    $objReader = \PHPExcel_IOFactory::createReader('Excel5');
}

//解析Excel檔案
$objPHPExcel = $objReader->load($file_puth);
$sheet = $objPHPExcel->getSheet(0);// 讀取第一個工作表(編號從 0 開始) 
$highestRow = $sheet->getHighestRow(); // 取得總行數
$highestColumn = $sheet->getHighestColumn(); // 取得總列數

//迴圈讀取excel檔案,讀取一條,插入陣列一條
for($j=2;$j<=$highestRow;$j++)
        {
            for($k='A';$k<=$highestColumn;$k++)
            {
                //讀取單元格
                $ExamPaper_arr[$j][$k]= $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
            }
        }


第三步:將獲取到的資料存入資料庫

使用foreach函式,迴圈對欄位陣列賦值,然後存入資料庫
$question_model=M('question');
$question_relationships_model = M('question_relationships');
$answer_model = M('answer');
foreach ($ExamPaper_arr as $key => $value) 
        {
$title_data['q_id'] = empty($value['A'])?0:$value['A'];
$title_data['post_title'] = empty($value['B'])?0:$value['B'];
$title_data['post_description'] = empty($value['D'])?0:$value['D'];
$title_data['post_difficulty'] = empty($value['E'])?0:$value['E'];
$title_data['post_date'] = time();
$question_model->add($title_data);
}