網站推廣php讀excel文件的方法

網站推廣經常使用的用PHP讀取EXCEL的方法有如下三種,各自有各自的優缺點。我的推薦用第三種方法,由於它能夠跨平臺使用。

1. 以.csv格式讀取

將.xls轉換成.csv的文本格式,而後再用PHP分析這個文件,和PHP分析文本沒有什麼區別。

優勢:跨平臺,效率比較高、能夠讀寫。

缺點:只能直接使用.csv的文件,若是常常接受.xls二進制文件的話須要手工轉換,不能自動化。一個文件只有一個SHEET。

PHP有自帶的分析.csv函數:fgetcsv

array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )

handle 一個由 fopen()、popen() 或 fsockopen() 產生的有效文件指針。

length (可選)必須大於 CVS 文件內最長的一行。在 PHP 5 中該參數是可選的。若是忽略(在 PHP 5.0.4 之後的版本中設爲 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。

delimiter (可選)設置字段分界符(只容許一個字符),默認值爲逗號。

enclosure (可選)設置字段環繞符(只容許一個字符),默認值爲雙引號。該參數是在 PHP 4.3.0 中添加的。 和 fgets() 相似,只除了 fgetcsv() 解析讀入的行並找出 CSV 格式的字段而後返回一個包含這些字段的數組。

fgetcsv() 出錯時返回 FALSE,包括碰到文件結束時。

注意: CSV 文件中的空行將被返回爲一個包含有單個 null 字段的數組,不會被當成錯誤。

固然也能夠本身手動分析字符串。

<?php$row = 1;$handle = fopen("test.csv","r");while ($data = fgetcsv($handle, 1000, ",")) { $num = count($data); echo " $num fields in line $row:\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "\n"; }}fclose($handle);?>

還能夠利用fputcsv函數將行格式化爲 CSV 並寫入文件指針。

2. ODBC連接數據源

優勢:支持多種格式,cvs, xls等。支持讀寫,使用標準SQL語言,和SQLSERVER、MYSQL數據庫幾乎徹底同樣。

缺點:值支持windows服務器

3. PHP自定義類

優勢:跨平臺。某些類支持寫操做。支持.xls二進制文件

經常使用的類有phpExcelReader、PHPExcel。其中後者支持讀寫,可是須要php5.2以上版本。

phpExcelReader是專門用來讀取文件的。返回一個數組,包含表格的全部內容。

該 class 使用的方法能夠參考網站下載回來的壓縮檔中的 example.php。

不過我下載回來的 (版本 2009-03-30),有兩點要注意:

reader.php 中的下面這行要修改

將 require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;

改成 require_once ‘oleread.inc’;

example.php 中

修改 $data->setOutputEncoding(’CP1251′);

爲 $data->setOutputEncoding(’CP936′);

修改 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 應該是壞了。

這是下載地址:

phpExcelReader:http://sourceforge.net/projects/phpexcelreader/

PHPExcel:http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=Documents&referringTitle=Home

有時寫程序時後臺要求把大量數據導入數據庫中,好比計算機考試成績的查詢、電話簿的數據等通常都是存放在excel中的,這時咱們可把數據導出成csv文 件,而後經過如下程序便可在後臺批量導入數據到數據庫中。

下面只是主要程序部分:

<?php

//定義獲取時間函數
function getmicrotime(){
   list($usec, $sec) = explode(" ",microtime());
   return ((float)$usec + (float)$sec);
}
?>
<?php
$time_start = getmicrotime();
include("db.inc.php");//鏈接數據庫
$db=new testcsv;
?>
<?php
$handle = fopen ("test.csv","r");
$sql="insert into scores(idcard,names,num,sex,nation,score) values(";
while ($data = fgetcsv ($handle, 1000, ",")) {

  $num = count ($data);
  for ($c=0; $c < $num; $c++) {
      if($c==$num-1){$sql=$sql.$data[$c].")";break;}
      $sql=$sql.$data[$c].",";
  }
print "<br>";
echo $sql."<br>";
$db->query($sql);
echo "sql語句執行成功!<br>";
$sql="insert into scores(idcard,names,num,sex,nation,score) values(";
}
fclose ($handle);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo "程序執行時間:".$time."秒";
? 網站推廣(fblww-0220)
相關文章
相關標籤/搜索