《PHP导入导出Excel方法小结.doc》由会员分享,可在线阅读,更多相关《PHP导入导出Excel方法小结.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流PHP导入导出Excel方法小结.精品文档.PHP导入导出Excel方法小结Posted by GgNET on 星期五, 一月9, 2009 Leave a comment (0) Go to comments 最近因项目需要,需要开发一个模块,把系统中的一些数据导出成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(“Maarten Balliauw”);$objPHPExcel-getProperties()-setLastModifiedBy(“Maarten Balliauw”);$objPHPExcel-getProperties()-setTitle(“Office 2007 XLSX Test Document”);$objPHPExcel-getProperties()-setSubject(“Office 2007 XLSX Test Document”);$objPHPExcel-getProperties()-s
4、etDescrption(“Test document for Office 2007 XLSX, generated using PHP classes.”);$objPHPExcel-getProperties()-setKeywords(“office 2007 openxml php”);$objPHPExcel-getProperties()-setCategory(“Test result file”);/ Add some dataecho date(H:i:s) . ” Add some datan”;$objPHPExcel-setActiveSheetIndex(0);$o
5、bjPHPExcel-getActiveSheet()-setCellValue(A1, Hello);$objPHPExcel-getActiveSheet()-setCellValue(B2, world!);$objPHPExcel-getActiveSheet()-setCellValue(C1, Hello);$objPHPExcel-getActiveSheet()-setCellValue(D2, world!);/ Rename sheetecho date(H:i:s) . ” Rename sheetn”;$objPHPExcel-getActiveSheet()-setT
6、itle(Simple);/ Set active sheet index to the first sheet, so Excel opens this as the first sheet$objPHPExcel-setActiveSheetIndex(0);/ Save Excel 2007 fileecho date(H:i:s) . ” Write to Excel2007 formatn”;$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);$objWriter-save(str_replace(.php, .xlsx,
7、 _FILE_);/ Echo doneecho date(H:i:s) . ” Done writing file.rn”;2、使用pear的Spreadsheet_Excel_Writer类下载地址: 此类依赖于OLE,下载地址:需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。不过可以设定格式,很强大。send(test.xls);/ Creating a worksheet$worksheet =& $workbook-addWorksheet(My first worksheet);/ The actual data$worksheet-write(0
8、, 0, Name);$worksheet-write(0, 1, Age);$worksheet-write(1, 0, John Smith);$worksheet-write(1, 1, 30);$worksheet-write(2, 0, Johann Schmidt);$worksheet-write(2, 1, 31);$worksheet-write(3, 0, Juan Herrera);$worksheet-write(3, 1, 32);/ Lets send the file$workbook-close();?3:利用smarty,生成符合Excel规范的XML或HTM
9、L文件支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。详细内容请见rardge大侠的帖子:需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5 ss:ExpandedRowCount=”21”之类的东西删掉。4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。缺点是无格式。不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。5、使用制表符、换行符的方法制表符”t”用户分割同一
10、行中的列,换行符”tn”可以开启下一行。6、使用com如果你的PHP可以开启com模块,就可以用它来导出Excel文件Application-valuen” ;print “Loaded version: $excel_app-Application-versionn”;$Workbook = $excel_app-Workbooks-Open(“$filename”) or Die(“Did not open $filename $Workbook”);$Worksheet = $Workbook-Worksheets($sheet1);$Worksheet-activate;$excel_
11、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);$excel_cell-activate;$excel_result = $excel_cell-value;print “$excel_resultn”;#To close all in
12、stances of excel:$Workbook-Close;unset($Worksheet);unset($Workbook);$excel_app-Workbooks-Close();$excel_app-Quit();unset($excel_app);?一个更好的例子: 一、PHP导入Excel1:还是用PHPExcel,官方网站: 2:使用PHP-ExcelReader,下载地址: 举例:setOutputEncoding(utf8);$data-read( jxlrwtest.xls);error_reporting(E_ALL E_NOTICE);for ($i = 1;
13、$i sheets0numRows; $i+) for ($j = 1; $j sheets0numCols; $j+) echo “”.$data-sheets0cells$i$j.”,”;echo “n”;方法一?phpheader(Cache-Control: no-cache, must-revalidate); header(Pragma: no-cache); header(Content-type: application/x-msexcel); header(Content-Disposition: attachment; filename=test.xls ); header
14、(Content-Description: PHP/INTERBASE Generated Data ); xlsBOF(); / begin Excel stream xlsWriteLabel(0,0,暂住家庭人员资料统计表);/write a Label A1 /xlsWriteNumber(0,1,9999); / write a number B1 xlsEOF(); / close the stream / - begin of function library - / Excel begin of file header function xlsBOF() echo pack(s
15、sssss, 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); return; / Excel end of file footer function xlsEOF() echo pack(ss, 0x0A, 0x00); return; / Function to write a Number (double) into Row, Col function xlsWriteNumber($Row, $Col, $Value) echo pack(sssss, 0x203, 14, $Row, $Col, 0x0); echo pack(d, $Value); return;
16、 / Function to write a label (text) into Row, Col function xlsWriteLabel($Row, $Col, $Value ) $L = strlen($Value); echo pack(ssssss, 0x204, 8 + $L, $Row, $Col, 0x0, $L); echo $Value; return; 方法二?php/ define database parameter$dbHost = localhost;$dbUsername = webuser;$dbPassword = 123456;$dbDbName =
17、pa_bbs;$dbTablename = pw_actions;/ connect database$Connect = mysql_connect($dbHost, $dbUsername, $dbPassword) or die(Couldnt connect.);$Db = mysql_select_db($dbDbName, $Connect) or die(Couldnt select database.);/ set header infomation$file_type = vnd.ms-excel;$file_ending = xls;header(Content-Type:
18、 application/$file_type);header(Content-Disposition: attachment; filename=$dbTablename.$file_ending);header(Pragma: no-cache);header(Expires: 0);/ export data to exceldate_default_timezone_set(Asia/Shanghai);$now_date = date(Y-m-d H:i:s);$title = 数据库名:$dbDbName, 数据表:$dbTablename, 备份日期:$now_date;echo
19、($titlen);$sql = set names gbk;mysql_query($sql,$Connect);$sql = select * from .$dbTablename.;$ALT_Db = mysql_select_db($dbDbName, $Connect) or die(Couldnt select database);$result = mysql_query($sql,$Connect) or die(mysql_error();$sep = t;for ($i = 0; $i mysql_num_fields($result); $i+) echo mysql_f
20、ield_name($result,$i) . t;print(n);$i = 0;while($row = mysql_fetch_row($result) $schema_insert = ; for($j=0; $jmysql_num_fields($result);$j+) if(!isset($row$j) $schema_insert .= NULL.$sep; elseif ($row$j != ) $schema_insert .= $row$j.$sep; else $schema_insert .= .$sep; $schema_insert = str_replace($
21、sep.$, , $schema_insert); $schema_insert .= t; print(trim($schema_insert); print n; $i+;return (true);问题总结注:mysql数据库为utf-8一、网上流行的一些函数function export($data)$data = iconv(utf-8, gb2312, $data); $filename = data.date(YmdHis).xls;header(Content-Type: application/vnd.ms-excel); Header(Accept-Ranges:bytes
22、); Header(Content-type:charset=utf-8); header(Content-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必须经
23、过iconv转码为相应的格式才可以正常显示汉字;2、经本人测试,iconv遇到一些字符会出错;二、用$table=这种格式,函数为:function export($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博客,转载请标明出处: