先把html代碼貼出來(整個導入導出的):
<form action="ADMIN_MAIN/Excel/into" enctype="multipart/form-data" method="post">
<input type="file" name="file_stu" />
<input type="submit" value="導入" />
</form>
<form action="ADMIN_MAIN/Excel/out" enctype="multipart/form-data" method="post">
<input type="submit" value="導出">
</form>
導入的方法:
網上試了好多方法,不是找不到update類就是引入某些檔案引入不進來。然後東拼西湊的寫法,解決了以上問題。需要用到一個ExcelToArrary.class.php這樣的檔案。(後面附上檔案 以及詳細說明)裡面的方法一般除了vendor引用的檔案根據自己目錄可能需要更改一下以外,其餘的基本上不用改動的。
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檔案,重新上傳');
}
/*設定上傳路徑*/
/*百度有些文章寫的上傳路徑經過編譯之後斜杠不對。不對的時候用大寫的DS代替,然後用連接配接符連結就可以拼湊路徑了。*/
$savePath = ROOT_PATH . 'public' . DS . 'upload' . DS;
/*以時間來命名上傳的檔案*/
$str = date('Ymdhis');
$file_name = $str . "." . $file_type;
/*是否上傳成功*/
if (!copy($tmp_file, $savePath . $file_name)) {
$this->error('上傳失敗');
}
/*
*對上傳的Excel資料進行處理生成程式設計資料,這個函數會在下面第三步的ExcelToArray類中
*注意:這裡調用執行了第三步類裡面的read函數,把Excel轉化為數組并傳回給$res,再進行資料庫寫入
*/
require THINK_PATH.'Library/Org1/Util/ExcelToArrary.class.php';//導入excelToArray類
//引入這個類試了百度出來的好幾個方法都不行。最後簡單粗暴的使用了require方式。這個類想放在哪裡放在哪裡。隻要路徑對就行。
$ExcelToArrary=new \ExcelToArrary();//執行個體化
$res=$ExcelToArrary->read($savePath.$file_name,"UTF-8",$file_type);//傳參,判斷office2007還是office2003
/*對生成的數組進行資料庫的寫入*/
foreach ($res as $k => $v) {
if ($k > 1) {
$data[$k]['username'] = $v[1];
$data[$k]['phone'] = $v[2];
// $data ['password'] = sha1('111111');
}
}
//插入的操作最好放在循環外面
$result = db('sys_ceshi')->insertAll($data);
//var_dump($result);
}
}
ExcelToArrary.class.php
<?php
/**
* 讀取Excel資料
*/
class ExcelToArrary {
public function __construct() {
//這些檔案需要下載下傳phpexcel,然後放在vendor檔案裡面。具體參考上一篇資料導出。
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;
}
}