使用PHPexcel注意

2021-05-24 13:32:48 字數 2943 閱讀 5872

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行,

if ($cell->hashyperlink())   

else   

改為if ($cell->hashyperlink()) else if($cell->getdatatype() == 

phpexcel_cell_datatype::type_string )   

else  

然後寫入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的列數和行數?

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 = 'iso***xx';改為$this->_defaultencoding = 'utf-8';解決的,就能讀出亂碼了,之後可以通過轉換編碼解決。我在官方**問了也未果,大家有更好的方法也可以跟我說說,謝謝。

PHPExcel 簡單使用

require once phpexcel.php phpreader new phpexcel reader excel2007 filepath wjyl.xlsx if phpreader canread filepath phpexcel phpreader load filepath 讀取...

thinkphp中使用PHPEXCEL匯入資料

匯入方法比較簡單 但必須考慮到excel本身單元格格式問題 例如以0開頭的字串讀出來被去掉了前導0 成為float型而丟失一位 必須進行處理 author lizhaoyao add time 2015 08 26 php excel import 使用者匯入excel param type fil...

使用PHPExcel讀取寫入Excel檔案資料

首先是讀取excel 引入phpexcel類檔案 require once phpexcel 1.8 classes phpexcel.php require once phpexcel 1.8 classes phpexcel writer excel2007.php 建立新物件,並開啟資料檔案 ...