[摘 要] 本文在分析Excel XML表格文件格式的基礎(chǔ)上,論述了利用XML、PHP技術(shù)將Excel工作表數(shù)據(jù)導(dǎo)入到網(wǎng)站數(shù)據(jù)庫的實現(xiàn)方法,并給出實例。
[關(guān)鍵詞] Excel 電子商務(wù)網(wǎng)站 PHP
一、引言
在互聯(lián)網(wǎng)絡(luò)高速發(fā)展的今天,眾多企業(yè)紛紛建立了各自的電子商務(wù)網(wǎng)站。本文論述了利用PHP、XML技術(shù)在網(wǎng)站中導(dǎo)入Excel數(shù)據(jù)的實現(xiàn)方法。
二、相關(guān)技術(shù)簡介
1.XML技術(shù)。XML是Web上的數(shù)據(jù)表示和交換的標(biāo)準(zhǔn),允許Internet的應(yīng)用程序之間交換數(shù)據(jù),并將數(shù)據(jù)的格式和內(nèi)容與處理方法分離開來。XML具有良好的數(shù)據(jù)存儲格式、開放性、可擴展性、自描述性、高度的結(jié)構(gòu)化、便于網(wǎng)絡(luò)傳輸?shù)忍匦浴?/p>
2.Exce l2003的XML支持。微軟的Office 2003增加了XML的支持功能。在Excel 2003中通過添加XML架構(gòu)定義(XSD文件)到工作簿,提高本機 XML 的支持??梢栽?Excel 電子表格和 XML架構(gòu)之間創(chuàng)建一個映像,輕松地導(dǎo)入從其他數(shù)據(jù)庫和應(yīng)用程序中創(chuàng)建的XML數(shù)據(jù),將XML元素從XML架構(gòu)中映像到Excel工作表的單元格,也可將Excel工作表數(shù)據(jù)導(dǎo)出為XML數(shù)據(jù),用于與其他數(shù)據(jù)庫和應(yīng)用程序的交互。
3.PHP和MySQL數(shù)據(jù)庫。PHP是當(dāng)前流行的開發(fā)網(wǎng)站應(yīng)用程序的一種Web服務(wù)器腳本語言,PHP提供的DOM解析器可以處理XML文檔。DOM解析器一次性地將整個XML文檔讀到內(nèi)存,并且DOM解析器為XML文檔的每個元素創(chuàng)建一個樹型結(jié)構(gòu),在內(nèi)存中保存其樹型結(jié)構(gòu)。MySQL是一個免費的SQL數(shù)據(jù)庫服務(wù)器軟件,廣泛應(yīng)用于網(wǎng)站的后臺數(shù)據(jù)庫。PHP和MySQL的組合是構(gòu)建商務(wù)網(wǎng)站的一種解決方案。
三、Excel數(shù)據(jù)導(dǎo)入到網(wǎng)站的數(shù)據(jù)庫的實現(xiàn)
下面以網(wǎng)上書店管理系統(tǒng)為例,介紹如何將Excel文件中的圖書信息導(dǎo)入到網(wǎng)站數(shù)據(jù)庫的實現(xiàn)過程。這里以MySQL作為網(wǎng)站的后臺數(shù)據(jù)庫。
1.將Excel工作表另存為Excel XML表格文檔。在Excel 2003中可以將工作表另存為XML表格文檔。Excel XML表格文檔實際上是文本文件,它直接根據(jù)Excel工作表的數(shù)據(jù)類型,將工作表保存為XML文檔,可以在Excel中打開XML表格文檔并且象標(biāo)準(zhǔn)Excel電子表格一樣進行編輯。上述圖書信息的Excel工作表另存為XML表格文檔后,其XML部分內(nèi)容如下:
<Workbook>
<Worksheet ss:Name=“Sheet1”>
<Table ss:ExpandedColumnCount=”3”ss:ExpandedRowCount=”150”>
... <Row>
<Cell><Data ss:Type=“String”>電子商務(wù)概論</Data></Cell>
<Cell><Data ss:Type=“String”>北京大學(xué)出版社</Data></Cell>
<Cell><Data ss:Type=“Number”>23.6</Data></Cell>
</Row>... </Table> ... </Worksheet>
</Workbook>
分析上面的部分XML內(nèi)容格式,得到XML表格文檔的根元素是<Workbook>,代表一個工作簿。在<Workbook>根元素下,<Worksheet>子元素定義當(dāng)前工作簿里的工作表,其ss:Name屬性指定工作表名稱,在一個有效的XML表格文檔里,至少需要該元素的一個實例。每個<Worksheet>元素包含一個<Table>元素,定義一個工作表的屬性和內(nèi)容,其中ss:ExpandedColumnCount屬性指定工作表的總列數(shù),ss:ExpandedRowCount屬性指定工作表的總行數(shù)。<Table>元素的子元素是<Row>,每個<Row>元素包含一個或者多個<Cell>元素,而<Cell>元素又包含<Data>元素,指定單元格的值。因此工作表中每行數(shù)據(jù)由一個<Row>元素來定義,每個單元格由<Cell>元素定義。
2.設(shè)計Excel XML表格文檔導(dǎo)入到網(wǎng)站數(shù)據(jù)庫的程序。對于另存的Excel XML表格文檔,通過訪問網(wǎng)站提供的表單頁面和程序,利用HTTP協(xié)議,將它上傳到網(wǎng)站,由Web服務(wù)器端的PHP腳本程序?qū)ι蟼鞯腦ML文檔進行解析,讀取其每個<Row>元素的數(shù)據(jù),作為一個新記錄插入到MySQL數(shù)據(jù)庫。導(dǎo)入Excel XML表格文檔的程序設(shè)計如下:
(1)創(chuàng)建Excel XML表格的XML文檔對象。PHP的全局?jǐn)?shù)組$_FILES存放了有關(guān)上傳文件的信息。假設(shè)上傳表單的文件域名為file,$_FILES['file']['tmp_name']數(shù)組元素就存放了上傳的臨時文件名。下面代碼根據(jù)上傳的XML文檔,創(chuàng)建一個文檔對象。$dom = DOMDocument::load($_FILES['file']['tmp_name']);
(2)讀取XML文檔的指定元素。利用文檔對象的getElementsByTagName方法獲取XML文檔中指定的所有子元素。下面代碼返回XML文檔中所有<Row>元素及其子孫元素組成的對象集合。$rows =$dom->getElementsByTagName('Row');根據(jù)上述設(shè)計思想,下面的PHP程序功能是讀取上傳的Excel XML表格文檔,外循環(huán)讀取每個<Row>元素對應(yīng)的對象,內(nèi)循環(huán)讀取一個<Row>元素對象中的每個<Cell>子元素對象,由$cell->nodeValue屬性得到<Cell>元素的值,即其中<Data>元素的內(nèi)容。根據(jù)讀取的一行數(shù)據(jù)內(nèi)容構(gòu)建一條INSERT命令,將新記錄插入到MySQL數(shù)據(jù)庫。
<?php
…
if ( $_FILES['file']['tmp_name'] ) {
$dom = DOMDocument::load( $_FILES['file']['tmp_name'] );
$rows = $dom->getElementsByTagName( 'Row' );
foreach ($rows as $row) {
$cells = $row->getElementsByTagName('Cell');
$vals=“”;
foreach( $cells as $cell )
$vals=$vals.“'”.$cell->nodeValue.“'”;
$vals=LEFT($vals,STRLEN($vals)-1);
$sql=“insert into BookStore(booktitle, publishor, price) values(“. $vals. “);”;
mysql_query($sql,$conn);
} } }
?>
四、結(jié)束語
本文介紹的Excel數(shù)據(jù)導(dǎo)入程序是針對某一種格式的Excel工作表的。利用這種Excel數(shù)據(jù)導(dǎo)入方法,實現(xiàn)原始數(shù)據(jù)到網(wǎng)站數(shù)據(jù)庫的自動導(dǎo)入,避免了大量數(shù)據(jù)重新輸入的問題,提高了管理人員的工作效率,可應(yīng)用于商務(wù)網(wǎng)站管理平臺。
參考文獻:
[1]微軟:Excel 2003幫助[EB/OL].http://office.microsoft.com/zh-cn/excel/
[2]徐輝:PHP Web程序設(shè)計教程與實驗[M].北京:清華大學(xué)出版社,2008