




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。PHP導(dǎo)入導(dǎo)出Excel方法小結(jié)-PHP導(dǎo)入導(dǎo)出Excel方法小結(jié)PostedbyGgNETon星期五,一月9,2009HYPERLINK/index.php/archives/3858lrespond#respondoLeaveacomment?Leaveacomment(0)HYPERLINK/index.php/archives/3858lcomments#commentsoGotocomments?Gotocomments最近因項目需要,需要開發(fā)一個模塊,把系統(tǒng)中的一些數(shù)據(jù)導(dǎo)出成Excel,修改
2、后再導(dǎo)回系統(tǒng)。就趁機對這個研究了一番,下面進行一些總結(jié)?;旧蠈?dǎo)出的文件分為兩種:1:類Excel格式,這個其實不是傳統(tǒng)意義上的Excel文件,只是因為Excel的兼容能力強,能夠正確打開而已。修改這種文件后再保存,通常會提示你是否要轉(zhuǎn)換成Excel文件。優(yōu)點:簡單。缺點:難以生成格式,如果用來導(dǎo)入需要自己分別編寫相應(yīng)的程序。2:Excel格式,與類Excel相對應(yīng),這種方法生成的文件更接近于真正的Excel格式。如果導(dǎo)出中文時出現(xiàn)亂碼,可以嘗試將字符串轉(zhuǎn)換成gb2312,例如下面就把$yourStr從utf-8轉(zhuǎn)換成了gb2312:$yourStr=mb_convert_encoding(“
3、gb2312,“UTF-8,$yourStr);下面詳細列舉幾種方法。一、PHP導(dǎo)出Excel1:第一推薦無比風(fēng)騷的PHPExcel,官方網(wǎng)站:/PHPExcel導(dǎo)入導(dǎo)出都成,可以導(dǎo)出office2007格式,同時兼容2003。下載下來的包中有文檔和例子,大家可以自行研究。抄段例子出來:getProperties()-setCreator(“MaartenBalliauw”);$objPHPExcel-getProperties()-setLastModifiedBy(“MaartenBalliauw”);$objPHPExcel-getProperties()-setTitle(“Offic
4、e2007XLSXTestDocument”);$objPHPExcel-getProperties()-setSubject(“Office2007XLSXTestDocument”);$objPHPExcel-getProperties()-setDescrption(“TestdocumentforOffice2007XLSX,generatedusingPHPclasses.”);$objPHPExcel-getProperties()-setKeywords(“office2007openxmlphp”);$objPHPExcel-getProperties()-setCategor
5、y(“Testresultfile”);/Addsomedataechodate(H:i:s).”Addsomedatan”;$objPHPExcel-setActiveSheetIndex(0);$objPHPExcel-getActiveSheet()-setCellValue(A1,Hello);$objPHPExcel-getActiveSheet()-setCellValue(B2,world!);$objPHPExcel-getActiveSheet()-setCellValue(C1,Hello);$objPHPExcel-getActiveSheet()-setCellValu
6、e(D2,world!);/Renamesheetechodate(H:i:s).”Renamesheetn”;$objPHPExcel-getActiveSheet()-setTitle(Simple);/Setactivesheetindextothefirstsheet,soExcelopensthisasthefirstsheet$objPHPExcel-setActiveSheetIndex(0);/SaveExcel2007fileechodate(H:i:s).”WritetoExcel2007formatn”;$objWriter=newPHPExcel_Writer_Exce
7、l2007($objPHPExcel);$objWriter-save(str_replace(.php,.xlsx,_FILE_);/Echodoneechodate(H:i:s).”Donewritingfile.rn”;2、使用pear的Spreadsheet_Excel_Writer類下載地址:/package/Spreadsheet_Excel_Writer此類依賴于OLE,下載地址:/package/OLE需要注意的是導(dǎo)出的Excel文件格式比較老,修改后保存會提示是否轉(zhuǎn)換成更新的格式。不過可以設(shè)定格式,很強大。send(test.xls);/Creatingaworksheet$
8、worksheet=&$workbook-addWorksheet(Myfirstworksheet);/Theactualdata$worksheet-write(0,0,Name);$worksheet-write(0,1,Age);$worksheet-write(1,0,JohnSmith);$worksheet-write(1,1,30);$worksheet-write(2,0,JohannSchmidt);$worksheet-write(2,1,31);$worksheet-write(3,0,JuanHerrera);$worksheet-write(3,1,32);/Let
9、ssendthefile$workbook-close();?3:利用smarty,生成符合Excel規(guī)范的XML或HTML文件支持格式,非常完美的導(dǎo)出方案。不過導(dǎo)出來的的本質(zhì)上還是XML文件,如果用來導(dǎo)入就需要另外處理了。詳細內(nèi)容請見rardge大俠的帖子:/viewthread.php?tid=745757需要注意的是如果導(dǎo)出的表格行數(shù)不確定時,最好在模板中把”ss:ExpandedColumnCount=”5ss:ExpandedRowCount=”21”之類的東西刪掉。4、利用pack函數(shù)打印出模擬Excel格式的斷句符號,這種更接近于Excel標(biāo)準(zhǔn)格式,用office2003修改后保
10、存,還不會彈出提示,推薦用這種方法。缺點是無格式。不過筆者在64位HYPERLINKjavascript:;t_selflinux系統(tǒng)中使用時失敗了,斷句符號全部變成了亂碼。5、使用制表符、換行符的方法制表符”t”用戶分割同一行中的列,換行符”tn”可以開啟下一行。6、使用com如果你的PHP可以開啟com模塊,就可以用它來導(dǎo)出Excel文件Application-valuen”;print“Loadedversion:$excel_app-Application-versionn”;$Workbook=$excel_app-Workbooks-Open(“$filename”)orDie(“
11、Didnotopen$filename$Workbook”);$Worksheet=$Workbook-Worksheets($sheet1);$Worksheet-activate;$excel_cell=$Worksheet-Range(“C4);$excel_cell-activate;$excel_result=$excel_cell-value;print“$excel_resultn”;$Worksheet=$Workbook-Worksheets($sheet2);$Worksheet-activate;$excel_cell=$Worksheet-Range(“C4);$exc
12、el_cell-activate;$excel_result=$excel_cell-value;print“$excel_resultn”;#Tocloseallinstancesofexcel:$Workbook-Close;unset($Worksheet);unset($Workbook);$excel_app-Workbooks-Close();$excel_app-Quit();unset($excel_app);?一個更好的例子:/u/16928/showart_387171.html一、PHP導(dǎo)入Excel1:還是用PHPExcel,官方網(wǎng)站:/PHPExcel。2:使用PHP
13、-ExcelReader,下載地址:/projects/phpexcelreader舉例:setOutputEncoding(utf8);$data-read(jxlrwtest.xls);error_reporting(E_ALLE_NOTICE);for($i=1;$isheets0numRows;$i+)for($j=1;$jsheets0numCols;$j+)echo“”.$data-sheets0cells$i$j.”,”;echo“n”;?方法一方法二?php/definedatabaseparameter$dbHost=localhost;$dbUsername=webuser
14、;$dbPassword=123456;$dbDbName=pa_bbs;$dbTablename=pw_actions;/connectdatabase$Connect=mysql_connect($dbHost,$dbUsername,$dbPassword)ordie(Couldntconnect.);$Db=mysql_select_db($dbDbName,$Connect)ordie(Couldntselectdatabase.);/setheaderinfomation$file_type=vnd.ms-excel;$file_ending=xls;header(Content-
15、Type:application/$file_type);header(Content-Disposition:attachment;filename=$dbTablename.$file_ending);header(Pragma:no-cache);header(Expires:0);/exportdatatoexceldate_default_timezone_set(Asia/Shanghai);$now_date=date(Y-m-dH:i:s);$title=數(shù)據(jù)庫名:$dbDbName,數(shù)據(jù)表:$dbTablename,備份日期:$now_date;echo($titlen);$
16、sql=setnamesgbk;mysql_query($sql,$Connect);$sql=select*from.$dbTablename.;$ALT_Db=mysql_select_db($dbDbName,$Connect)ordie(Couldntselectdatabase);$result=mysql_query($sql,$Connect)ordie(mysql_error();$sep=t;for($i=0;$imysql_num_fields($result);$i+)echomysql_field_name($result,$i).t;print(n);$i=0;whi
17、le($row=mysql_fetch_row($result)$schema_insert=;for($j=0;$j問題總結(jié)注:mysql數(shù)據(jù)庫為utf-8一、網(wǎng)上流行的一些函數(shù)functionexport($data)$data=iconv(utf-8,gb2312,$data);$filename=data.date(YmdHis).xls;header(Content-Type:application/vnd.ms-excel);Header(Accept-Ranges:bytes);Header(Content-type:charset=utf-8);header(Content-D
18、isposition:attachment;filename=.$filename);header(Pragma:no-cache);header(Expires:0);/$data這個變量如果是數(shù)組的話在函數(shù)里應(yīng)該對數(shù)組進行分解,在excel里的分列用t,分行用n,iconv轉(zhuǎn)碼會出錯,原因:1、無論編碼是utf-8還是gb2312,因為我的$data數(shù)據(jù)是從編碼為utf-8的mysql的數(shù)據(jù)庫里查出,經(jīng)過自己測試發(fā)現(xiàn)無論charset=兩者中的任何一個,$data必須經(jīng)過iconv轉(zhuǎn)碼為相應(yīng)的格式才可以正常顯示漢字;2、經(jīng)本人測試,iconv遇到一些字符會出錯;二、用$table=這種格式,函數(shù)為:functionexport($data)$filename=data.date(YmdHis).xls;header(Content-Type:application/vnd.ms-excel);Header(Accept-Ranges:bytes);Header(Content-type:charset=utf-8);header(Content-Disposition:attachment;filen
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《6 陶罐和鐵罐》教學(xué)設(shè)計-2023-2024學(xué)年語文三年級下冊統(tǒng)編版
- Unit 8 Our Clothes Topic 1 Section B 教學(xué)設(shè)計 2024-2025學(xué)年仁愛科普版英語八年級下冊
- 2024-2025學(xué)年九年級物理下冊 19.2廣播電視與通信教學(xué)設(shè)計2 (新版)粵教滬版
- Unit 4 Pets Story Time(教學(xué)設(shè)計)-2024-2025學(xué)年人教新起點版英語三年級上冊
- Unit 2 More than fun Developing ideas I 教學(xué)設(shè)計-2024-2025學(xué)年外研版(2024)七年級英語上冊
- 2024年高中英語 Unit 2 Lesson7 Project教學(xué)設(shè)計 牛津譯林版選擇性必修第二冊
- 2024秋八年級物理上冊 第6章 質(zhì)量和密度 第2節(jié) 密度教學(xué)設(shè)計(新版)新人教版
- 藝術(shù)培訓(xùn)招生方案
- 7《我們的衣食之源》(第一課時)(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治四年級下冊
- 一年級道德與法治下冊 第四單元 溫暖你我他 第十一課 小手拉小手教學(xué)設(shè)計 蘇教版
- 醫(yī)學(xué)教材 鼻竇病變的CT和MRI診斷思路解析
- 2024年河南省機關(guān)單位工勤技能人員培訓(xùn)考核高級工技師《職業(yè)道德》題庫
- 2023光伏并網(wǎng)柜技術(shù)規(guī)范
- 綜合港區(qū)海水淡化引水工程施工組織設(shè)計
- 《紅色故事會傳承革命精神》主題班會
- 結(jié)余結(jié)轉(zhuǎn)資金管理辦法
- 2021年化工企業(yè)典型事故案例分析
- 2024年GINA哮喘防治指南修訂解讀課件
- 兒童死亡報告制度
- 2024年長春汽車職業(yè)技術(shù)大學(xué)單招職業(yè)技能測試題庫附答案
- 奧數(shù)試題(試題)-2023-2024學(xué)年四年級下冊數(shù)學(xué)人教版
評論
0/150
提交評論