PHP匯入Excel資料

2022-01-16 00:21:03 字數 4294 閱讀 6088

首先看看示例**,了解一下excel reader的基本使用方式(按照下面的注釋step by step)

<?php 

// 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";

}?>

這個簡單的例子只是輸出了excel中每個單元格的值,我們還需要拼接sql語句最終將這些值插入到資料庫中,而且當excel的第一行為列頭時,這一行資料是不能夠插入到資料表中的。

下面的步驟就來演示這一簡單過程。

1. 建立資料庫,資料表

--建立test資料庫

create database test;

use test;

--建立books表

create table books

(isbn varchar(50) primary key,

pubdate varchar(50)

);

2. 拼接sql

<?php 

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方法

importexceldata ( $data, 'books', array ('isbn', 'pubdate' ), true );

/** * 將讀取到的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)

?>

3. 優化

上面的方法有乙個問題,每次生成乙個insert語句,就執行一次插入操作,如果excel的資料量很大,那麼執行的插入操作也非常多。既然如此,何不生成一批sql語句後再執行插入操作呢?

我對importexceldata方法做了簡單的優化,加了乙個batchsize引數,表示每次執行多少條插入語句,也許這樣的做法會更加節約資源。

/**

* 將讀取到的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)

}

books.xls檔案的內容如圖1:

【圖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...