成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用PHPExcel要點解析

開發 后端
使用PHPExcel的時候經常會遇到各種問題,我們在這篇文中就為大家總結出了幾條解決的辦法,希望對有需要的朋友有所幫助。

我們在網站開發中經常都會用到PHP,來幫助我們實現許多功能需求。在處理數據庫時,通常都會使用PHPExcel,那么在實際使用中又會出現各種問題,值得我們去深入研究。#t#

以前準備做一個PHP將excel導入mysql數據庫的通用程序,基本完成之后就沒有管它了。上個月,教務處老師叫我幫忙做一個“國家等級考試報名查詢系統”,也需要將學生excel信息導入導出,照片zip壓縮導入導出。

上一周剛完成這個程序,雖然用java這樣的語言處理比較簡單,不過PHP增加這個功能卻是5.2以上的版本才能夠完成(需要新增的PHP_zip擴展)。畢竟一個月的接觸,也略微懂了一些最基礎的用法,也遇到了一起才起手很容易碰到的問題,網上關于這個介紹比較簡略,我想具體的介紹一下它的基本用法和可能遇到的基本問題。

首先,你需要打開PHP_zip擴展,找到你起作用的PHP.INI文件,并打開這個擴展,將PHP文件夾里面的ext文件夾中的PHP_zip.dll文件找到,并復制到system32系統文件夾中(具體要看你的配置方法)。

網上最多的問題就是使用PHPExcel的時候,沒有打開這個擴展。就會顯示諸如<Fatal error:Class 'ZipArchive' not found in …..的錯誤,就是這個原因。然后,就可以使用它了,最好的辦法是看它自帶的test示例文檔,就可以大概知道它的基本用法,當然看完自帶的test示例文檔后,這篇文章也可能對你整體理解有一定好處。

下面我只想說說一些需要注意和容易錯的地方。

1.使用PHPExcel創建excel文檔對象有2種。

一種是直接創建

include 'PHPExcel/Writer/Excel2007.PHP';
$objPHPExcel = new PHPExcel();

另外一種是通過reader類進行讀取創建

require 'PHPExcel/Reader/Excel2007.PHP';
$objReader = new PHPExcel_Reader_Excel2007;
$objPHPExcel = $objReader->load("mytest.xlsx");

我這里想說明的是,這里包含excel2007.PHP, 就是創建的xlsx類型的excel,也就是ms office2007打開的,如果要創建以前的xls的話(office2007以前版本),就需要包含excel5.PHP,而不是 excel2007,不管是reader類還是writer類,這個要注意。比如上面說的2種用法就應該直接創建:

include 'PHPExcel/Writer/Excel5.PHP';
$objPHPExcel = new PHPExcel();

通過reader類進行讀取創建

require 'PHPExcel/Reader/Excel5.PHP';
$objReader = new PHPExcel_Reader_Excel5;
$objPHPExcel = $objReader->load("mytest.xlsx");

2.看了使用PHPExcel給出的文檔之后很有可能問,我就是想讀取excel的一個單元格的值,怎么沒有給出怎么讀呢?這個開始我也遇到過,你可以這樣:

$sheet = $objPHPExcel->getActiveSheet();
$string = $sheet->getCell('F2')->getValue();

當然,這個一般情況下也是能用了,如果你的excel是公式,你就應該

$sheet = $objPHPExcel->getActiveSheet();
$string = $sheet->getCell('F2')-> getCalculatedValue();

3.使用PHPExcel關于長數字被轉換成科學計數法的問題。

并且最后幾位被忽略為0,這個問題困擾了我很久,就是比如身份證,學號這樣的數字,如果你直接setValue的話,出來的excel被自動轉換成科學計數法,網上本來這樣的資料少,而且我發現大多數還是錯的。我查到了一篇文檔,是通過改動PHPexcel源碼實現的

Writer/Excel5文件,第202行,

  1. if ($cell->hasHyperlink()) {  
  2. $worksheet->writeUrl($row, $column,
     str_replace('sheet://', 'internal:', 
    $cell-
    >getHyperlink()->getUrl()), 
    $cell-
    >getValue(), $formats[$styleHash]);  
  3. }  
  4. else {  
  5. $worksheet->write($row, $column, $cell->
    getValue(), $formats[$styleHash],$style->
    getNumberFormat()->getFormatCode());  
  6. }  
  7. 改為if ($cell->hasHyperlink()) {  
  8. $worksheet->writeUrl($row, $column, 
    str_replace('sheet://', 'internal:', 
    $cell-
    >getHyperlink()->getUrl()), $cell->
    getValue(), $formats[$styleHash]);  
  9. }else if($cell->getDataType() == 
    PHPExcel_Cell_DataType::TYPE_STRING ) {  
  10. $worksheet->writeString($row,$column,$cell->
    getValue(),$formats[$styleHash]);  
  11. }  
  12. else {  
  13. $worksheet->write($row,$column,$cell->
    getValue(),$formats[$styleHash],$style->
    getNumberFormat()->getFormatCode());} 

然后寫入excel的時候通過以文本格式寫入就可以了(不修改源代碼以 文本格式寫入也是科學技術 法)

$objPHPExcel->getActiveSheet()->setCellValueExplicit($letters_arr[$j+1] . ($i+1),$this->student_info[$i][$j],PHPExcel_Cell_DataType::TYPE_STRING);
$objPHPExcel->getActiveSheet()->getStyle($letters_arr[$j+1] . ($i+1))->getNumberFormat()->setFormatCode("@");

4.使用PHPExcel如何得到excel的列數和行數?

往往開始使用PHPexcel會覺得不好用的地方也是如此,因為它的test示例程序也沒有給出這個。以下是我在codeplex問的問題以及解答。大家看了也就知道了(帖子后面圖片)。

5.使用PHPExcel如何通過循環得到每一個單元格的值。

ObjPHPExcel這個對象你print_r輸出會 看到很多復雜的東西,其實通過自帶的方法會很簡單。我是采用這樣的方法

$letters_arr = array(1=>'A',2=>'B',3=>'C',4=>'D',5=>'E',6=>'F',7=>'G',8=>'H',9=>'I',10=>'J',11=>'K',12=>'L',13=>'M', 14=>'N',15=>'O',16=>'P',17=>'Q',18=>'R',19=>'S',20=>'T',21=>'U',22=>'V',23=>'W',24=>'X',25=>'Y',26=>'Z');

通過設置一個字符的數組,就可以用循環變量循環列數了。這里我還出了個小笑話,以前我居然想通過A字符轉換為ASC碼來循環,未果,我翻了一下PHP的書才知道PHP轉換字符成整形和C,C++不是一樣的,真是基礎不扎實啊。

6.使用PHPExcel關于數據庫和excel的編碼問題。

這個也需要大家注意,excel是采用的UTF-8編碼,于是你每次從數據庫讀出數據后,應該不要忘了轉換一次。
$this->student_info[$i][$j]=iconv("gbk","UTF-8",$this->student_info[$i][$j]);但是記住,問題卻沒有這樣簡單,當你使用PHPExcel從excel讀取數據的時候,可能會發現居然有漢字的列會沒有讀出來,是空的。

用print_r打印出來一看,那個單元格也是空的,這個并不是轉換編碼問題,因為如果是編碼,應該打印出亂碼, 這個卻是PHPexcel沒有讀出那一列的漢字。這個問題我也不是太明白,我打開reader的excel5.PHP文件 把$this->_defaultEncoding = 'isoXXXXX';改為$this->_defaultEncoding = 'UTF-8';解決的,就能讀出亂碼了,之后可以通過轉換編碼解決。我在官方網站問了也未果,大家有更好的方法也可以跟我說說,謝謝。

責任編輯:曹凱 來源: 百度博客
相關推薦

2010-06-17 15:54:24

UML總結

2012-07-06 15:23:28

Linux集群

2010-01-28 13:50:03

Android移植

2011-09-16 11:23:10

布線布線系統線纜

2009-12-24 09:48:29

WPF分割條

2010-09-04 10:57:27

園區網絡

2011-07-20 11:11:48

網橋交換機

2010-01-15 17:38:33

VB.NET公共運行環

2023-11-19 20:16:43

RESTAPIPOST

2010-07-20 15:59:32

交換機Vlan

2015-08-10 17:58:22

騰訊社交LBS

2010-08-03 12:53:51

FlexBuilder

2020-04-27 15:08:59

網絡安全審查辦法網絡安全攻擊

2021-05-20 11:13:22

Linux紅外文件

2009-12-29 16:36:47

Silverlight

2011-04-21 17:25:53

針式打印機

2009-12-31 16:50:02

Silverlight

2010-02-22 17:13:40

WCF會話狀態

2010-08-09 10:03:43

FlexBuilder

2017-09-30 10:17:24

云計算PaaS容器云
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品视频在线 | av中文网| 久久久久久久av | 一区二区三区视频在线观看 | 一级黄在线观看 | 久草视频网站 | 色综合久久伊人 | av网站免费看| 色综合一区二区 | 中文字幕1区2区3区 日韩在线视频免费观看 | 欧美日韩一区二区三区四区五区 | 欧美精品一区二区在线观看 | 波多野结衣一区二区三区在线观看 | 日韩一区二区三区在线播放 | 日本污视频 | 亚洲精品无 | 男女午夜免费视频 | 亚洲一区自拍 | 午夜影院 | 中文字幕不卡在线观看 | 国产区精品 | 中文字幕亚洲专区 | 999观看免费高清www | 日韩一区二区三区在线 | 日韩在线小视频 | 亚洲第一成人av | www.色五月.com| 波多野结衣先锋影音 | 中文在线播放 | 蜜桃视频在线观看www社区 | 91看片在线观看 | 成人不卡一区二区 | 国产人免费人成免费视频 | www.久草.com| 国产欧美精品一区二区色综合朱莉 | 久久精品一区 | 成人免费淫片aa视频免费 | 中文字幕一区二区三区四区 | 国产精品久久国产精品久久 | 91久久精品一区二区二区 | 殴美黄色录像 |