《PHP导入导出Excel方法小结说课材料.doc》由会员分享,可在线阅读,更多相关《PHP导入导出Excel方法小结说课材料.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。PHP导入导出Excel方法小结-PHP导入导出Excel方法小结PostedbyGgNETon星期五,一月9,2009Leaveacomment(0)Gotocomments最近因项目需要,需要开发一个模块,把系统中的一些数据导出成Excel,修改后再导回系统。就趁机对这个研究了一番,下面进行一些总结。基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。优
2、点:简单。缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:$yourStr=mb_convert_encoding(“gb2312,“UTF-8,$yourStr);下面详细列举几种方法。一、PHP导出Excel1:第一推荐无比风骚的PHPExcel,官方网站:导入导出都成,可以导出office2007格式,同时兼容2003。下载下来的包中有文档和例子,大家可以自行研究。抄
3、段例子出来:getProperties()-setCreator(“MaartenBalliauw”);$objPHPExcel-getProperties()-setLastModifiedBy(“MaartenBalliauw”);$objPHPExcel-getProperties()-setTitle(“Office2007XLSXTestDocument”);$objPHPExcel-getProperties()-setSubject(“Office2007XLSXTestDocument”);$objPHPExcel-getProperties()-setDescrption(“
4、TestdocumentforOffice2007XLSX,generatedusingPHPclasses.”);$objPHPExcel-getProperties()-setKeywords(“office2007openxmlphp”);$objPHPExcel-getProperties()-setCategory(“Testresultfile”);/Addsomedataechodate(H:i:s).”Addsomedatan”;$objPHPExcel-setActiveSheetIndex(0);$objPHPExcel-getActiveSheet()-setCellVa
5、lue(A1,Hello);$objPHPExcel-getActiveSheet()-setCellValue(B2,world!);$objPHPExcel-getActiveSheet()-setCellValue(C1,Hello);$objPHPExcel-getActiveSheet()-setCellValue(D2,world!);/Renamesheetechodate(H:i:s).”Renamesheetn”;$objPHPExcel-getActiveSheet()-setTitle(Simple);/Setactivesheetindextothefirstsheet
6、,soExcelopensthisasthefirstsheet$objPHPExcel-setActiveSheetIndex(0);/SaveExcel2007fileechodate(H:i:s).”WritetoExcel2007formatn”;$objWriter=newPHPExcel_Writer_Excel2007($objPHPExcel);$objWriter-save(str_replace(.php,.xlsx,_FILE_);/Echodoneechodate(H:i:s).”Donewritingfile.rn”;2、使用pear的Spreadsheet_Exce
7、l_Writer类下载地址:此类依赖于OLE,下载地址:需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。不过可以设定格式,很强大。send(test.xls);/Creatingaworksheet$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);$worksh
8、eet-write(2,0,JohannSchmidt);$worksheet-write(2,1,31);$worksheet-write(3,0,JuanHerrera);$worksheet-write(3,1,32);/Letssendthefile$workbook-close();?3:利用smarty,生成符合Excel规范的XML或HTML文件支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。详细内容请见rardge大侠的帖子:需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5
9、ss:ExpandedRowCount=”21”之类的东西删掉。4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。缺点是无格式。不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。5、使用制表符、换行符的方法制表符”t”用户分割同一行中的列,换行符”tn”可以开启下一行。6、使用com如果你的PHP可以开启com模块,就可以用它来导出Excel文件Application-valuen”;print“Loadedversion:$excel_app-Application-v
10、ersionn”;$Workbook=$excel_app-Workbooks-Open(“$filename”)orDie(“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($sh
11、eet2);$Worksheet-activate;$excel_cell=$Worksheet-Range(“C4);$excel_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);?一个更好的例子:一、PHP导入Excel
12、1:还是用PHPExcel,官方网站:2:使用PHP-ExcelReader,下载地址:举例: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=webus
13、er;$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(Conten
14、t-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=数据库名:$dbDbName,数据表:$dbTablename,备份日期:$now_date;echo($titlen)
15、;$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;w
16、hile($row=mysql_fetch_row($result)$schema_insert=;for($j=0;$j问题总结注:mysql数据库为utf-8一、网上流行的一些函数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
17、-Disposition:attachment;filename=.$filename);header(Pragma:no-cache);header(Expires:0);/$data这个变量如果是数组的话在函数里应该对数组进行分解,在excel里的分列用t,分行用n,iconv转码会出错,原因:1、无论编码是utf-8还是gb2312,因为我的$data数据是从编码为utf-8的mysql的数据库里查出,经过自己测试发现无论charset=两者中的任何一个,$data必须经过iconv转码为相应的格式才可以正常显示汉字;2、经本人测试,iconv遇到一些字符会出错;二、用$table=这种
18、格式,函数为: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;filename=.$filename);header(Pragma:no-cache);header(Expires:0);即去掉:$data=iconv(utf-8,gb2312,$data);但是必须要加上,这行内容可以保证如果从mysql数据库查询数据为空的情况下,其它的汉字也可以正常显示用的好处:1、写法与html相似,可以在程序里加入一些样式,导出的excel比较好看;2、省去了汉字编码经常出错的麻烦3、由于不需要用iconv这个函数,可以导出正确的汉字数据:)本文来自CSDN博客,转载请标明出处:-