準(zhǔn)備工作: 下載PHP-ExcelReader,下載后用到\phpExcelReader\Excel目錄下的oleread.inc和reader.php兩個文件,并將reader.php文件打開后require_once 'Spreadsheet/Excel/Reader/OLERead.php';屏蔽掉,增加為require_once 'oleread.inc'; 然后直接將這兩個文件復(fù)制到服務(wù)器下WAMP,直接復(fù)制到WWW目錄下,再將所需要的excel文件考進(jìn)來我的文件是classify.xls,然后需要一個調(diào)用reader.php的文件,源代碼如下:
港南網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
ExcelToMysql.php
?php
require_once 'reader.php';
$data = new Spreadsheet_Excel_Reader();
$data-setOutputEncoding('gbk');
$data-read('classify.xls'); //”classify.xls”是指要導(dǎo)入到mysql中的excel文件
@ $db = mysql_connect("localhost", "root", "") or
die("Could not connect to database.");//連接數(shù)據(jù)庫
mysql_query("set names 'gbk'");//輸出中文
mysql_select_db('japlearn'); //選擇數(shù)據(jù)庫
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i = $data-sheets[0]['numRows']; $i++) {
//以下注釋的for循環(huán)打印excel表數(shù)據(jù)
//以下代碼是將excel表數(shù)據(jù)【6個字段】插入到mysql中,根據(jù)你的excel表字段的多少,改寫以下代碼吧!
$sql = "INSERT INTO classify VALUES('".
$data-sheets[0]['cells'][$i][1]."','".
$data-sheets[0]['cells'][$i][2]."','".
$data-sheets[0]['cells'][$i][3]."','".
$data-sheets[0]['cells'][$i][4]."','".$data-sheets[0]['cells'][$i][5]."','".$data-sheets[0]['cells'][$i][6]."')";
echo $sql.'br /';
$res = mysql_query($sql);
}
?
把上面代碼注釋的地方替換成自己配置好的數(shù)據(jù),如數(shù)據(jù)庫配置等。運(yùn)行本機(jī)測試地址實(shí)現(xiàn)導(dǎo)入。
1、建立一個數(shù)組,取名為$ShuZu,舉例數(shù)組的內(nèi)容是學(xué)生的信息,包括姓名、性別和年齡。
$ShuZu = array
(
array("姓名","性別","年齡"),
array("張三","男",13),
array("里斯","女",12),
array("王五","男",15)
);
2、建立一個變量,用來存儲需要顯示的表格。
$BiaoGe = "";
給¥BiaoGe賦初始值,
$BiaoGe = $BiaoGe."table ";
3、構(gòu)建外循環(huán),取出數(shù)組$ShuZu中的行數(shù)。
for ($i=0; $icount($ShuZu); $i++)
{
$BiaoGe = $BiaoGe. "tr";
$BiaoGe = $BiaoGe. "/tr";
}
4、構(gòu)建內(nèi)循環(huán),取出每行中的每一個列。
for ($i=0; $icount($ShuZu); $i++)
{
$BiaoGe = $BiaoGe. "tr";
for ($j=0;$jcount($ShuZu[$i]);$j++)
{
$BiaoGe = $BiaoGe. "td".$ShuZu[$i][$j]."/td";
}
$BiaoGe = $BiaoGe. "/tr";
}
5、加入表示表格結(jié)尾的html標(biāo)記。
$BiaoGe = $BiaoGe. "/table";
6、使用echo 方法顯示表格。
echo? $BiaoGe;
7、查看運(yùn)行結(jié)果,這樣,表格就制作完成了。
常用的用PHP讀取EXCEL的方法有以下三種,各自有各自的優(yōu)缺點(diǎn)。個人推薦用第三種方法,因為它可以跨平臺使用。
1. 以.csv格式讀取
將.xls轉(zhuǎn)換成.csv的文本格式,然后再用PHP分析這個文件,和PHP分析文本沒有什么區(qū)別。
優(yōu)點(diǎn):跨平臺,效率比較高、可以讀寫。
缺點(diǎn):只能直接使用.csv的文件,如果經(jīng)常接受.xls二進(jìn)制文件的話需要手工轉(zhuǎn)換,不能自動化。一個文件只有一個SHEET。
PHP有自帶的分析.csv函數(shù):fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一個由 fopen()、popen() 或 fsockopen() 產(chǎn)生的有效文件指針。
length (可選)必須大于 CVS 文件內(nèi)最長的一行。在 PHP 5 中該參數(shù)是可選的。如果忽略(在 PHP 5.0.4 以后的版本中設(shè)為 0)該參數(shù)的話,那么長度就沒有限制,不過可能會影響執(zhí)行效率。
delimiter (可選)設(shè)置字段分界符(只允許一個字符),默認(rèn)值為逗號。
enclosure (可選)設(shè)置字段環(huán)繞符(只允許一個字符),默認(rèn)值為雙引號。該參數(shù)是在 PHP 4.3.0 中添加的。 和 fgets() 類似,只除了 fgetcsv() 解析讀入的行并找出 CSV 格式的字段然后返回一個包含這些字段的數(shù)組。
fgetcsv() 出錯時返回 FALSE,包括碰到文件結(jié)束時。
注意: CSV 文件中的空行將被返回為一個包含有單個 null 字段的數(shù)組,不會被當(dāng)成錯誤。
當(dāng)然也可以自己手動分析字符串。
還可以利用fputcsv函數(shù)將行格式化為 CSV 并寫入文件指針。
2. ODBC鏈接數(shù)據(jù)源
優(yōu)點(diǎn):支持多種格式,cvs, xls等。支持讀寫,使用標(biāo)準(zhǔn)SQL語言,和SQLSERVER、MYSQL數(shù)據(jù)庫幾乎完全一樣。
缺點(diǎn):值支持windows服務(wù)器
3. PHP自定義類
優(yōu)點(diǎn):跨平臺。某些類支持寫操作。支持.xls二進(jìn)制文件
常用的類有phpExcelReader、PHPExcel。其中后者支持讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取文件的。返回一個數(shù)組,包含表格的所有內(nèi)容。
該 class 使用的方法可以參考網(wǎng)站下載回來的壓縮檔中的 example.php。
不過我下載回來的 (版本 2009-03-30),有兩點(diǎn)要注意:
reader.php 中的下面這行要修改
將 require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;
改為 require_once ‘oleread.inc’;
example.php 中
修改 $data-setOutputEncoding(’CP1251′);
為 $data-setOutputEncoding(’CP936′);
example2.php 中
修改 nl2br(htmlentities($data-sheets[$sheet]['cells'][$row][$col]));
為 $table_output[$sheet] .= nl2br(htmlspecialchars($data-sheets[$sheet]['cells'][$row][$col]));
不然中文會有問題。
繁體的話可以修改為CP950、日文是CP932,具體可參考codepage說明。
修改 $data-read(’jxlrwtest.xls’) 為自己的 excel 文件名,zip 檔中附的 jxlrwtest.xls 應(yīng)該是壞了。
php 把數(shù)據(jù)導(dǎo)出到excel表格有多種方法,比如使用 phpExcel 等,以下代碼是直接通過 header 生成 excel 文件的代碼示例:
?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=xls_region.xls");
$cfg_dbhost?=?'localhost';
$cfg_dbname?=?'testdb';
$cfg_dbuser?=?'root';
$cfg_dbpwd?=?'root';
$cfg_db_language?=?'utf8';
//?END?配置
//鏈接數(shù)據(jù)庫
$link?=?mysql_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd);
mysql_select_db($cfg_dbname);
//選擇編碼
mysql_query("set?names?".$cfg_db_language);
//users表
$sql?=?"desc?users";
$res?=?mysql_query($sql);
echo?"tabletr";
//導(dǎo)出表頭(也就是表中擁有的字段)
while($row?=?mysql_fetch_array($res)){
$t_field[]?=?$row['Field'];?//Field中的F要大寫,否則沒有結(jié)果
echo?"th".$row['Field']."/th";
}
echo?"/tr";
//導(dǎo)出100條數(shù)據(jù)
$sql?=?"select?*?from?users?limit?100";
$res?=?mysql_query($sql);
while($row?=?mysql_fetch_array($res)){
echo?"tr";
foreach($t_field?as?$f_key){
echo?"td".$row[$f_key]."/td";
}
echo?"/tr";
}
echo?"/table";
?
下面是我寫的一個PHP導(dǎo)出數(shù)據(jù)到CSV問價的函數(shù),你到時候直接調(diào)用就行了
/**
*?導(dǎo)出CSV文件
*?@param?string?$fileName 文件名字
*?@param?string|array?$data?導(dǎo)出數(shù)據(jù),csv格式的字符串|數(shù)值數(shù)組
*?@param?string?$to_encoding?目標(biāo)轉(zhuǎn)換編碼
*?@param?string?$from_encoding?當(dāng)前編碼
*/
function?exportCSV($fileName?=?'',?$data?=?'',?$to_encoding?=?'gb2312',?$from_encoding?=?'utf-8')?{
$fileName?=?empty($fileName)???date('YmdHis')?:?$fileName;
//?文件標(biāo)簽
Header("Content-type:?application/octet-stream");
header("Content-type:?application/vnd.ms-excel;?charset=$from_encoding");
Header("Content-Disposition:?attachment;?filename=$fileName.csv");
$str?=?'';
if($data)?{
if(is_array($data))?{
foreach?($data?as?$v)?{
if(is_array($v))?{
foreach?($v?as?$vo)?{
$str?.=?(is_numeric($vo)???"'".$vo?:?$vo."").",";
}
$str?=?trim($str,?",")."\r\n";
}?else?{
$str?.=?(is_numeric($v)???"'".$v?:?$v).",";
}
}
$str?=?trim($str,?",")."\r\n";
}?else?{
$str?=?$data;
}
}
echo?mb_convert_encoding($str,?"gb2312",?"utf-8");
exit;
}
看你的表格,只需要從表單中循環(huán)取出所有行,然后依次寫入數(shù)據(jù)庫就行了
假設(shè)表單中是:txt1[] txt2[]......
通過$a=$_POST["txt1[]"]取得值,然后循環(huán)寫入:
for($t=0;$t=count($a)-1;$t++){
// insert into 表 (字段1,......) values ('$a[$t]',.....)
}
至于打印,在JS中直接windows.print就行了
網(wǎng)頁題目:php里怎么用表格數(shù)據(jù),php建表格
路徑分享:http://muchs.cn/article46/hssoeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、虛擬主機(jī)、Google、定制開發(fā)、域名注冊、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)