楊鑫
摘要:在信息系統的開發(fā)過程中,經常要將電子表格導入到網站數據庫表,有時候還需要將數據庫表中的內容導出到Excel電子表格。該文介紹了一種基于PHP的電子表格導入導出技術:將電子表格保存為CSV格式,再讀出每行數據,分隔每行數據為不同的字段,再把字段寫入數據庫表;此外,PHP還提供了寫Excel電子表格的功能。
關鍵詞:Excel電子表格;MySql數據表;導入;導出
中圖分類號:TP317 文獻標識碼:A 文章編號:1009-3044(2016)18-0091-02
PHP Implementation of Data Import and Export in the Online Examination System
YANG Xin
(Department of Computer Science,Wuhan Polytechnic, Wuhan 430074, China)
Abstract: In the development process of information system, often need to import the spreadsheet to the website database table, and sometimes also need to export the contents of the database table to Excel electronic form. This paper introduces a kind of based on PHP spreadsheet import and export technology: save the spreadsheet as a file in CSV format, read out data for each line, separating each row of data for different field, then the field is written as a database table; in addition, PHP also provides functionality to write Excel spreadsheet.
Key words:Excel table; MySQL table; import; export
本網絡在線考試系統采用LAMP(Linux+Apache+MySQL+PHP)平臺。采用B/S架構,根據武漢職業(yè)技術學院精品資源共享課《管理信息系統開發(fā)》在線考試系統需求,本考試系統支持單選題、多選題、判斷題等客觀題題型,支持將考生信息和試題從Excel中導入到系統(MySQL數據庫),還支持將成績信息(MySQL數據表)導出到Excel電子表格。
1 從Excel電子表格導入到MySQL數據表
將電子表格Excel導入到MySQL數據庫表。為了最簡潔地把問題講述清楚,我們以最簡單的電子表格stu.xls為例,stu.xls中保存中考生的信息,包括學號、姓名和成績,其中考前成績?yōu)榭?,考試結束后成績不為空。
1.1 電子表格轉變?yōu)榧兾谋靖袷?/p>
第一步,使用辦公軟件Excel將電子表格stu.xls另存為stu.csv格式,如圖1所示。CSV格式實際上是一種以逗號為分隔的純文本格式,如果使用記事本打開stu.csv文件則顯示為如圖2的純文本格式。
1.2 純文本文件的分割
第二步:分割純文本文件stu.csv。因為該文件是純文本文件,容易想到將該文件分割為不同的行,每一行就是一個考生信息的記錄(除首行是標題信息外)。然后再用逗號將每一行繼續(xù)分割為不同的字段值。在php中提供了字符串分割函數explode。該函數的功能是分割字符串為字符型數組。例如:執(zhí)行語句$st=explode(“,”,”01,劉備”)后,可以得到$st[0]=”01”,$st[1]=”劉備”。
關鍵代碼為:
$content=file_get_contents("cj.csv");
$temp = explode("\r\n",$content);
$content就是文本文件中的內容,包含特殊字符回車和換行。因此可以考慮使用回車和換行字符將$content分割為字符型數組。上面兩行代碼執(zhí)行之后,$temp[0]=”學號,姓名,成績”;$tem[1]=”01,劉備”;$temp[2]=”02,關羽”;$temp[3]=”03,張飛”;$temp[4]=”04,趙云”;
1.3 繼續(xù)分割記錄,并寫入MySQL數據庫表
第三步:繼續(xù)分割文本文件的每一行。即分割$temp數組的每一個元素。使用逗號來分割。分割得到的結果是不同的字段,例如可以得到“01”、“劉備”、“03”、“趙云”等等信息。然后順便寫入到MySQL數據庫表中。關鍵代碼為:
$conn=mysql_connect("127.0.0.1","root","root") or die ("connect mysql false");
mysql_select_db("db_chengji", $conn);
mysql_query("set names utf8");
for ($j=1;$j { $st=explode(",",$temp[$j]); $sql3="insert into tb_cj (xuehao,xingming,score) values( '".$st[0]."','".$st[1]."','-1')";
mysql_query($sql3,$conn);
}
上面的代碼,將Excel表中的內容分割為多行,每一行保存在數組$temp中,再將字符型數組的每一個元素分割為單個的字段信息。
考慮到標題無需導入到數據庫表,因此上面的循環(huán)變量$j從1開始(有意跳過0,忽略標題信息),再將記錄插入MySQL數據表的時候,將成績項用字符串-1來填充(-1表示考試前)。
Excel文件stu.csv導入到數據表tb_cj后結果如圖3所示。
2 從MySQL數據表導出到Excel電子表格
考試后需要將考生的成績導出到Excel 文件。導出為Excel文件非常簡單,只需要把成績顯示在html的table中,然后在php文件的前面加上下面兩個語句即可:
header("Content-type:application/vnd.ms=excel");
header("Content-Disposition:attachment;filename=cj.xls");
完整代碼如下:
<?php
header("Content-type:application/vnd.ms=excel");
header("Content-Disposition:attachment;filename=cj.xls");
$conn=mysql_connect("127.0.0.1","root","root") or die ("connect mysql false");
mysql_query("set names utf8");
$db_selected = mysql_select_db("db_chengji", $conn);
$sql=mysql_query("select * from tb_cj",$conn);
?>
<?php while($info=mysql_fetch_array($sql)){ ?>
<?php } ?>
<?php echo "學生成績表";?> | ||
考號 | 姓名 | 分數 |
<?php echo $info[1];?> | <?php echo $info[2];?> | <?php echo $info[3];?> |
導出后的Excel文件如圖4所示:
備注:圖中0分、89分和78分是考試成績,而-1則表示該生沒有參加考試。
3 結束語
關于導入:可以采用通用式的方法。比如導入考試試題的時候,有些題目有兩個選項(判斷題)有些題目是四個選項(單選題),有些則是五個選項,可以采用文件域打開Excel 文件,并對打開的文件的數據進行自動判斷,在導入文件中的數據進行檢測,篩選,等等。
關于導出:因為html中的表格table是可以設置為各種各樣的,導出后的Excel 文件會與table表格完全一致,因此,完全可以將最高分、最低分、不及格分數、不及格人數、平均分,缺考考生姓名等以不同顏色字體顯示出來,還可以詳細地分析成績并以餅圖的形式顯示出來,因為篇幅所限,本文不做介紹。
參考文獻:
[1] 軟件開發(fā)技術聯盟.PHP開發(fā)實例大全[M].北京:清華大學出版社,2016.
[2] 徐康明, 辛洪郁.實戰(zhàn)突擊PHP項目開發(fā)案例整合[M]. 2版.北京:電子工業(yè)出版社, 2014.