首先看看示例**,了解一下excel reader的基本使用方式(按照下面的注釋step by step)
<?php這個簡單的例子只是輸出了excel中每個單元格的值,我們還需要拼接sql語句最終將這些值插入到資料庫中,而且當excel的第一行為列頭時,這一行資料是不能夠插入到資料表中的。// 1.引用excelreader類檔案
require_once
'excel/reader.php';
// 2.例項化讀取excel的類
$data = new spreadsheet_excel_reader();
// 3.設定輸出編碼
$data->setoutputencoding('utf-8');
// 4.讀取指定的excel
$data->read('test.xls');
// 5.迴圈輸出每一行資料,這裡讀取的是excel的第乙個sheet**
// sheets[0]['numrows']代表行數
// sheet
s[0]['numcols']代表列數
for ($i = 1; $i <= $data->sheets[0]['numrows']; $i++)
echo
"\n";
}?>
下面的步驟就來演示這一簡單過程。
1. 建立資料庫,資料表
--建立test資料庫2. 拼接sqlcreate database test;
use test;
--建立books表
create table books
(isbn varchar(50) primary key,
pubdate varchar(50)
);
<?php3. 優化require_once
'excel/reader.php';
@ $db = mysql_connect ( 'localhost', 'root', 'root' ) or die ( "could not connect to database." ); // 連線資料庫
mysql_query ( "set names 'utf-8'" ); // 輸出中文
mysql_select_db ( 'test' ); // 選擇資料庫
$data = new spreadsheet_excel_reader ();
$data->setoutputencoding ( 'utf-8' );
$data->read ( 'books.xls' );
// 呼叫importexceldata方法
/** * 將讀取到的excel資料匯入到資料庫中
* *
@access
public
* @param
* hascolumnheader 是否包含列頭
* @param
* columnarray 要插入的列
* @param
* tablename 要插入的表
* @return
bool
*/function importexceldata($data, $tablename, $columnarray, $hascolumnheader = false)
// 生成insert語句的前半部分
// 形式如這種:insert into table_name('field1','field2'...) va
lues
$insert_statement = createinsertstatement ( $tablename, $columnarray );
for($i = $start; $i <= $data->sheets [0] ['numrows']; $i ++)
$sql = trimend ( $sql, "," );
$sql .= ");";
$res = mysql_query ( $sql );
}}/**
* 建立插入sql的語句
* *
@access
public
* @param
* tablename
* @param
* columnarray
* @return
string
*/function createinsertstatement($tablename, $columnarray)
$sql = trimend ( $sql, "," );
$sql .= ") values";
return $sql;
}/**
* 移除字串中指定的尾部字元
* *
@access
public
* @param
* str
* @param
* strend
* @return
string
*/function trimend($str, $strend)
?>
上面的方法有乙個問題,每次生成乙個insert語句,就執行一次插入操作,如果excel的資料量很大,那麼執行的插入操作也非常多。既然如此,何不生成一批sql語句後再執行插入操作呢?
我對importexceldata方法做了簡單的優化,加了乙個batchsize引數,表示每次執行多少條插入語句,也許這樣的做法會更加節約資源。
/**books.xls檔案的內容如圖1:* 將讀取到的excel資料匯入到資料庫中
* *
@access
public
* @param
hascolumnheader 是否包含列頭
* @param
columnarray 要插入的列
* @param
tablename 要插入的表
* @param
batchsize 每次執行插入語句的條數
* @return
bool
*/function importexceldata($data,$tablename,$columnarray,$hascolumnheader = false, $batchsize = 100)
// 記錄迴圈次數
$loop = 0;
$sql = "";
// 生成insert語句的前半部分
// 形式如這種:insert into table_name('field1','field2'...) values
$insert_statement = createinsertstatement($tablename, $columnarray);
for($i = $start; $i <= $data->sheets[0]['numrows']; $i++)
$sql = trimend($sql,",");
$sql .= ");";
$loop ++;
// 當loop值等於batchsize時,執行插入操作
if($loop == $batchsize)
//echo $sql;
}// 如果有950條記錄,執行了前9個batch,剩餘50條也應當執行
if($loop != 0)
}
【圖1】
生成的sql語句如圖2:
【圖2】
執行後的結果如圖3:
【圖3】
當然excel reader類中提供的方法不止這些,大家可以參考sourceforge上提供的example,也可以直接去檢視或更改源**獲取自己需求的功能。
PHP 匯入excel資料
之前發過使用phpexcel將資料匯出到excel檔案的方法,本篇文章主要介紹下如何使用phpexcel將excel檔案匯入到資料庫的方法。下面首先說一下本次匯入的excel檔案的資料格式,截圖如下 下面是將該excel檔案的資料匯入到資料庫的具體 檢視 列印 01 02require once c...
PHP匯入Excel資料
首先看看示例 了解一下excel reader的基本使用方式 按照下面的注釋step by step 1.引用excelreader類檔案 require once excel reader.php 2.例項化讀取excel的類 data new spreadsheet excel reader 3...
php匯入excel資料到mysql
例項 1.匯入只有乙個sheets的excel檔案 require once db.php 引用資料庫例項化類 require once reader.php 應用匯入excel的類 data new spreadsheet excel reader 例項化類 data setoutputencod...