使用phpexcel解析Excel數據表並存儲到數據庫中全過程_PHP_thinkphp_cmf

分享經驗是爲了讓你少走彎路————華偉君php


##使用PHPExcel解析Excel數據表並存儲到數據庫中全過程

###第一部分:thinkphp中實例化上傳類獲取from表單提交的文件(非thinkPHP用戶能夠忽略,直接看第二部分)

####HTML文件核心代碼:thinkphp

<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'];
            }

###第二部分:導入PHPExcel類庫,並對Excel表格進行查詢解析

Thinkphp中,第三方類庫的存放文件路徑是:ThinkPHP\Extend\Vendor 內置類庫路徑常量爲 VENDOR_PATH服務器

.xls文件與.xlax文件的區別: 版本問題 ,XLSX是高版本。 07版之後的擴展名都是.xlsx ,是用新的基於XML的壓縮文件格式取代了其目前專有的默認文件格式,在傳統的文件名擴展名後面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等),使其佔用空間更小,能夠向下兼容xls。函數

####在php文件中導入PHPExcel類庫,並對Excel表格進行解析的代碼:post

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); }

###最後

少俠,看完了,點個贊噻~ui

相關文章
相關標籤/搜索