PHP导入导出Excel方法小结.doc_第1页
PHP导入导出Excel方法小结.doc_第2页
PHP导入导出Excel方法小结.doc_第3页
PHP导入导出Excel方法小结.doc_第4页
PHP导入导出Excel方法小结.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP导入导出Excel方法小结Posted by GgNET on 星期五, 一月9, 2009 Leave a comment (0) Go to comments 最近因项目需要,需要开发一个模块,把系统中的一些数据导出成Excel,修改后再导回系统。就趁机对这个研究了一番,下面进行一些总结。基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。优点:简单。缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:$yourStr = mb_convert_encoding(“gb2312, “UTF-8, $yourStr);下面详细列举几种方法。一、PHP导出Excel1:第一推荐无比风骚的PHPExcel,官方网站: /PHPExcel导入导出都成,可以导出office2007格式,同时兼容2003。下载下来的包中有文档和例子,大家可以自行研究。抄段例子出来: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()-setDescrption(“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);$objPHPExcel-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()-setTitle(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, _FILE_);/ Echo doneecho date(H:i:s) . ” Done writing file.rn”;2、使用pear的Spreadsheet_Excel_Writer类下载地址: /package/Spreadsheet_Excel_Writer此类依赖于OLE,下载地址:/package/OLE需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。不过可以设定格式,很强大。send(test.xls);/ Creating a worksheet$worksheet =& $workbook-addWorksheet(My first worksheet);/ The actual data$worksheet-write(0, 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或HTML文件支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。详细内容请见rardge大侠的帖子:/viewthread.php?tid=745757需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5 ss:ExpandedRowCount=”21”之类的东西删掉。4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。缺点是无格式。不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。5、使用制表符、换行符的方法制表符”t”用户分割同一行中的列,换行符”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_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 instances of excel:$Workbook-Close;unset($Worksheet);unset($Workbook);$excel_app-Workbooks-Close();$excel_app-Quit();unset($excel_app);?一个更好的例子: /u/16928/showart_387171.html一、PHP导入Excel1:还是用PHPExcel,官方网站: /PHPExcel。2:使用PHP-ExcelReader,下载地址: /projects/phpexcelreader举例:setOutputEncoding(utf8);$data-read( jxlrwtest.xls);error_reporting(E_ALL E_NOTICE);for ($i = 1; $i sheets0numRows; $i+) for ($j = 1; $j sheets0numCols; $j+) echo “”.$data-sheets0cells$i$j.”,”;echo “n”;?方法一方法二?php/ define database parameter$dbHost = localhost;$dbUsername = webuser;$dbPassword = 123456;$dbDbName = 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: 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($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_field_name($result,$i) . t;print(n);$i = 0;while($row = mysql_fetch_row($result) $schema_insert = ; for($j=0; $j 问题总结注: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); 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=两者中的任

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论