先把html代碼貼出來(lái)(整個(gè)導(dǎo)入導(dǎo)出的):
<form action="ADMIN_MAIN/Excel/into" enctype="multipart/form-data" method="post">
<input type="file" name="file_stu" />
<input type="submit" value="導(dǎo)入" />
</form>
<form action="ADMIN_MAIN/Excel/out" enctype="multipart/form-data" method="post">
<input type="submit" value="導(dǎo)出">
</form>
導(dǎo)入的方法:
網(wǎng)上試了好多方法严衬,不是找不到update類就是引入某些文件引入不進(jìn)來(lái)骡和。然后東拼西湊的寫法苗缩,解決了以上問(wèn)題樊销。需要用到一個(gè)ExcelToArrary.class.php這樣的文件整慎。(后面附上文件 以及詳細(xì)說(shuō)明)里面的方法一般除了vendor引用的文件根據(jù)自己目錄可能需要更改一下以外,其余的基本上不用改動(dòng)的围苫。
public function into()
{
if (!empty ($_FILES ['file_stu'] ['name'])) {
$tmp_file = $_FILES ['file_stu'] ['tmp_name'];
$file_types = explode(".", $_FILES ['file_stu'] ['name']);
$file_type = $file_types [count($file_types) - 1];
/*判別是不是.xls文件裤园,判別是不是excel文件*/
if (strtolower($file_type) != "xlsx") {
$this->error('不是Excel文件,重新上傳');
}
/*設(shè)置上傳路徑*/
/*百度有些文章寫的上傳路徑經(jīng)過(guò)編譯之后斜杠不對(duì)剂府。不對(duì)的時(shí)候用大寫的DS代替拧揽,然后用連接符鏈接就可以拼湊路徑了。*/
$savePath = ROOT_PATH . 'public' . DS . 'upload' . DS;
/*以時(shí)間來(lái)命名上傳的文件*/
$str = date('Ymdhis');
$file_name = $str . "." . $file_type;
/*是否上傳成功*/
if (!copy($tmp_file, $savePath . $file_name)) {
$this->error('上傳失敗');
}
/*
*對(duì)上傳的Excel數(shù)據(jù)進(jìn)行處理生成編程數(shù)據(jù),這個(gè)函數(shù)會(huì)在下面第三步的ExcelToArray類中
*注意:這里調(diào)用執(zhí)行了第三步類里面的read函數(shù)周循,把Excel轉(zhuǎn)化為數(shù)組并返回給$res,再進(jìn)行數(shù)據(jù)庫(kù)寫入
*/
require THINK_PATH.'Library/Org1/Util/ExcelToArrary.class.php';//導(dǎo)入excelToArray類
//引入這個(gè)類試了百度出來(lái)的好幾個(gè)方法都不行强法。最后簡(jiǎn)單粗暴的使用了require方式。這個(gè)類想放在哪里放在哪里湾笛。只要路徑對(duì)就行饮怯。
$ExcelToArrary=new \ExcelToArrary();//實(shí)例化
$res=$ExcelToArrary->read($savePath.$file_name,"UTF-8",$file_type);//傳參,判斷office2007還是office2003
/*對(duì)生成的數(shù)組進(jìn)行數(shù)據(jù)庫(kù)的寫入*/
foreach ($res as $k => $v) {
if ($k > 1) {
$data[$k]['username'] = $v[1];
$data[$k]['phone'] = $v[2];
// $data ['password'] = sha1('111111');
}
}
//插入的操作最好放在循環(huán)外面
$result = db('sys_ceshi')->insertAll($data);
//var_dump($result);
}
}
ExcelToArrary.class.php
<?php
/**
* 讀取Excel數(shù)據(jù)
*/
class ExcelToArrary {
public function __construct() {
//這些文件需要下載phpexcel,然后放在vendor文件里面嚎研。具體參考上一篇數(shù)據(jù)導(dǎo)出蓖墅。
vendor("PHPExcel.PHPExcel.PHPExcel");
vendor("PHPExcel.PHPExcel.Writer.Excel5");
vendor("PHPExcel.PHPExcel.Writer.Excel2007");
vendor("PHPExcel.PHPExcel.IOFactory");
}
public function read($filename,$encode,$file_type){
if(strtolower ( $file_type )=='xls')//判斷excel表類型為2003還是2007
{
Vendor("Excel.PHPExcel.Reader.Excel5");
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader = PHPExcel_IOFactory::createReader('Excel5');
}elseif(strtolower ( $file_type )=='xlsx')
{
Vendor("Excel.PHPExcel.Reader.Excel2007");
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
}
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($filename);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 1; $row <= $highestRow; $row++) {
for ($col = 0; $col < $highestColumnIndex; $col++) {
$excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
return $excelData;
}
}