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