❶ 如何利用ThinkPHP框架实现Excel数据导入和导出
首先,将PHPExcel文件放入到vendor目录下面:备注:ThinkPHP3.1的路径是:./ThinkPHP/Extend/Vendor/;ThinkPHP3.2的路径是:./ThinkPHP/Library/Vendor/;数据导出功能的实现:编写导出为Excel的函数exportExcel: public function exportExcel($expTitle,$expCellName,$expTableData){ $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称 $fileName = $_SESSION['account'].date('_YmdHis');//文件输出的文件名 $cellNum = count($expCellName); $dataNum = count($expTableData);vendor("PHPExcel.PHPExcel"); $objPHPExcel = new PHPExcel();//ThinkPHP3.1的写法 $objPHPExcel = new \PHPExcel();//ThinkPHP3.2的写法,有命名空间的概念 $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'); $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格 // $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s')); for($i=0;$i<$cellNum;$i++){ $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]); } // Miscellaneous glyphs, UTF-8 for($i=0;$i<$dataNum;$i++){ for($j=0;$j<$cellNum;$j++){$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]); } }header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"'); header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//ThinkPHP3.1的写法 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//ThinkPHP3.2的写法,有命名空间的概念 $objWriter->save('php://output'); exit; }3.读取数据,调用数据调用数据导出函数exportExcel:function expUser(){//导出Excel $xlsName = "User"; $xlsCell = array( //设置字段名和列名的映射 array('id','账号序列'), array('truename','名字'), array('sex','性别'), array('res_id','院系'), array('sp_id','专业'), array('class','班级'), array('year','毕业时间'), array('city','所在地'), array('company','单位'), array('cheng','职称'), array('wu','职务'), array('jibie','级别'), array('tel','电话'), array('qq','qq'), array('email','邮箱'), array('honor','荣誉'), array('remark','备注') ); $xlsModel = M('Member'); $xlsData = $xlsModel->Field('id,truename,sex,res_id,sp_id,class,year,city,company,cheng,wu,jibie,tel,qq,email,honor,remark')->select();//将sex字段中1和0分贝装换为“男”和“女” foreach ($xlsData as $k => $v) { $xlsData[$k]['sex']=$v['sex']==1?'男':'女'; } $this->exportExcel($xlsName,$xlsCell,$xlsData); }
❷ 如何用php 制作导入excel
常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。 1. 以.csv格式读取 将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。
❸ 怎么使用php把表格中的数据导入到excel中
下面是我写的一个PHP导出数据到CSV问价的函数,你到时候直接调用就行了
/***导出CSV文件*@paramstring$fileName文件名字*@paramstring|array$data导出数据,csv格式的字符串|数值数组*@paramstring$to_encoding目标转换编码*@paramstring$from_encoding当前编码*/functionexportCSV($fileName='',$data='',$to_encoding='gb2312',$from_encoding='utf-8'){$fileName=empty($fileName)?date('YmdHis'):$fileName;//文件标签Header("Content-type:application/octet-stream");header("Content-type:application/vnd.ms-excel;charset=$from_encoding");Header("Content-Disposition:attachment;filename=$fileName.csv");$str='';if($data){if(is_array($data)){foreach($dataas$v){if(is_array($v)){foreach($vas$vo){$str.=(is_numeric($vo)?"'".$vo:$vo."").",";}$str=trim($str,",")."";}else{$str.=(is_numeric($v)?"'".$v:$v).",";}}$str=trim($str,",")."";}else{$str=$data;}}echomb_convert_encoding($str,"gb2312","utf-8");exit;}
❹ PHP Excel大批量导入崩溃怎么办
项目需要批量导入excel文件,如果里面有重复的数据要怎么处理呢?每插入一次数据都要到数据库查询么?回复内容:项目需要批量导入excel文件,如果里面有重复的数据要怎么处理呢?每插入一次数据都要到数据库查询么?1、如果里面有重复的数据要怎么处理呢?1<code>可以先判断数据库是否有该数据。</code>2、每插入一次数据都要到数据库查询么1<code>是的。</code>先去重得到没有重复的数据,再批量插入数据库。也可以尝试MYSQL中的insert ignore into或 replace into如果查询比较慢,对不能重复的字段加唯一键,然后用INSERT IGNORE INTOphp批量导入数据出错我现在要做的是,把一个产品数据从EXCEL中导入到PHP的MYSQL中,导入的过程中,总是会提示“Allowed memory size of 167772160 bytes exhausted (tried to allocate 689919 bytes) in D:\wamp\www\Company\proct\admin\uploadOrder.php on line 167”这个错误,然后我分成第100条导入时,就不会提示这个错误,这个是不是内存溢出,有没有好的解决方法呢?——解决方案——————–php.ini中讲memory_limit选项设置大一点,然后重启apache或nginx就行了 ——解决方案——————–文件太大了,这样的话可以用source命令直接导入! ——解决方案——————–
❺ php导入excel 怎么获取excel表格数据
常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。1. 以.csv格式读取将.xls转换成.csv的文本格式,然后再用PHP分析这个文件,和PHP分析文本没有什么区别。优点:跨平台,效率比较高、可以读写。缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个SHEET。PHP有自带的分析.csv函数:fgetcsvarray fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )handle 一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。length (可选)必须大于 CVS 文件内最长的一行。在 PHP 5 中该参数是可选的。如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。delimiter (可选)设置字段分界符(只允许一个字符),默认值为逗号。enclosure (可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在 PHP 4.3.0 中添加的。 和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。注意: CSV 文件中的空行将被返回为一个包含有单个 null 字段的数组,不会被当成错误。当然也可以自己手动分析字符串。还可以利用fputcsv函数将行格式化为 CSV 并写入文件指针。2. ODBC链接数据源优点:支持多种格式,cvs, xls等。支持读写,使用标准SQL语言,和SQLSERVER、MYSQL数据库几乎完全一样。缺点:值支持windows服务器3. PHP自定义类优点:跨平台。某些类支持写操作。支持.xls二进制文件常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。该 class 使用的方法可以参考网站下载回来的压缩档中的 example.php。不过我下载回来的 (版本 2009-03-30),有两点要注意:reader.php 中的下面这行要修改将 require_once ‘Spreadsheet/Excel/Reader/OLERead.php’;改为 require_once ‘oleread.inc’;example.php 中修改 $data->setOutputEncoding(’CP1251′);为 $data->setOutputEncoding(’CP936′);example2.php 中修改 nl2br(htmlentities($data->sheets[$sheet]['
❻ 为什么php导入excle出错
//php获取form表单提交的文件信息$file = $_FILES['execl']['name'];$tmp_name = $_FILES['execl']['tmp_name'];//移动上传的文件function d_file_move($file,$filetempname){ $filePath = "./upfile/";//设置上传文件的路径 if(!is_dir($filePath)) mkdir($filePath);//检查并创建文件夹 $time = date('YmdHis',time());//设置文件名,注意设置时区 $extend = strchr($file,'.');//获取文件后缀 $name = $time.$extend;//设置上传后完整的文件名 $uploadfile = $filePath.$name;//文件路径 $res = move_uploaded_file($filetempname,$uploadfile);//通过move_uploaded_file函数移动文件到指定目录 if($res) return $uploadfile;//如果成功返回当前文件路径 return false;}//通过调用d_file_move函数来移动form表单上传的文件$file_name = $this->d_file_move($file,$tmp_name);现在再使用PHP批量导入excel的类,来读取移动后的文件路径,如:$data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding('utf-8'); $resval = $data->read($file_name);这样就可以避开The filename *.xls is not readable
❼ php如何批量导入excel表格文件
$data=newSpreadsheet_Excel_Reader();//实例化02$data->setOutputEncoding('utf-8');//设置读取编码03$data->read($p);//$p就是excel文件路径0405for($i=2;$i<=$data->sheets[0]['numRows'];$i++){06//传如数组,将一行信息写入数据库;07$arr=$data->sheets[0]['cells'][$i];08if($arr){09$r=addUserLine($arr,$posts['bid']);10if($r){11echo"楼栋:".$r['bldgname']."房间:".$r['roomname']."学员:".$r['name']."学号:".$r['sid']."导入成功<br/><hr/>";12}else{13echo"<br/><hr/>";14}15}16}
❽ 导入excel文件,后端php处理导入的数据并存入数据库,需要前后端结合的demo!
thinkphp3.2和phpexcel导入最基本用法先整个最基础的代码,理解了这个,后面的就非常简单了
$file_name='./Upload/excel/123456.xls';import("Org.Util.PHPExcel");import("Org.Util.PHPExcel.IOFactory");$objReader=PHPExcel_IOFactory::createReader('Excel5');$objPHPExcel=$objReader->load($file_name,$encode='utf-8');$sheet=$objPHPExcel->getSheet(0);$highestRow=$sheet->getHighestRow();//取得总行数$highestColumn=$sheet->getHighestColumn();//取得总列数$s=$objPHPExcel->getActiveSheet()->getCell("A2")->getValue();
表格内容:
publicfunctionupload(){$files=$_FILES['exl'];//exl格式,否则重新上传if($files['type']!='application/vnd.ms-excel'){$this->error('不是Excel文件,请重新上传');}//上传$upload=newThinkUpload();//实例化上传类$upload->maxSize=3145728;//设置附件上传大小$upload->exts=array('xls');//设置附件上传类型$upload->rootPath='./Upload/';//设置附件上传根目录$upload->savePath='excel/';//设置附件上传(子)目录//$upload->subName=array('date','Ym');$upload->subName='';//上传文件$info=$upload->upload();$file_name=$upload->rootPath.$info['exl']['savepath'].$info['exl']['savename'];$exl=$this->import_exl($file_name);//去掉第exl表格中第一行unset($exl[0]);//清理空数组foreach($exlas$k=>$v){if(empty($v)){unset($exl[$k]);}};//重新排序sort($exl);$count=count($exl);//检测表格导入成功后,是否有数据生成if($count<1){$this->error('未检测到有效数据');}//开始组合数据foreach($exlas$k=>$v){$goods[$k]['goods_sn']=$v;//查询数据库$where['goods_sn']=array('like','%'.$v.'%');$res=M('goods')->where($where)->find();$goods[$k]['goods_name']=$res['goods_name'];$goods[$k]['goods_thumb']=$res['goods_thumb'];if($res){//是否匹配成功$goods[$k]['is_match']='1';$f+=1;}else{//匹配失败$goods[$k]['is_match']='0';$w+=1;}}//实例化数据$this->assign('goods',$goods);//print_r($f);//统计结果$total['count']=$count;$total['success']=$f;$total['error']=$w;$this->assign('total',$total);//删除Excel文件unlink($file_name);$this->display('info');}/*处理上传exl数据*$file_name文件路径*/publicfunctionimport_exl($file_name){//$file_name='./Upload/excel/123456.xls';import("Org.Util.PHPExcel");//这里不能漏掉import("Org.Util.PHPExcel.IOFactory");$objReader=PHPExcel_IOFactory::createReader('Excel5');$objPHPExcel=$objReader->load($file_name,$encode='utf-8');$sheet=$objPHPExcel->getSheet(0);$highestRow=$sheet->getHighestRow();//取得总行数$highestColumn=$sheet->getHighestColumn();//取得总列数for($i=1;$i<$highestRow+1;$i++){$data[]=$objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue();}return$data;}
有问题一定要及时弄清楚
❾ php怎么导入大量数据的excel
php导出大量数据的Excel:PHP从数据库分多次读取100万行记录,和分多次将100万行写入文本文件都没问题Excel可以支持100万行记录,Excel 2003最大支持65536行,从2007版开始支持104万行了,目前2007的盗版应该比较普及了-_-! 问清楚客户是什么版本。要导出excel的理由是非常充分和正确的,应该继续坚持。业务人员最熟悉的就是Excel,实在不熟悉现学现用也比别的快。只是要注意,当数据量达到10万行这个级别时,Excel的公式填充将会非常非常慢,如果再有LOOKUP()公式,基本上十分钟内处理CPU满载进程管理器杀不掉的状态,这时候其实xampp + phpmyadmin是一个易用性和性能都最平衡的选择PHPExcel输出的是Excel XML格式,有个XML头和尾,中间是数据Body,需要将100万行都赋值给一个数组才可以调用PHPExcel->write(),这容易导致PHP执行超时或者内存超限,不妨调整一下php.ini配置,把超时时间和内存限制都改到很大如果是输出csv格式,那就太简单了,你的问题可能是没给字段内容加引号,加上引号再调用fputcsv试试?其实fputcsv做的事情特别简单,你甚至可以不管它,自己把CSV文件的每一行拼接好了之后用file_put_contents写入
❿ PHP将Excel导入数据库中
如果小的话,可以直接导入excel文件,如果大的话,请先存成csv文件,然后通过mysql的loaddata导入数据库
未经允许不得转载:山九号 » php导入excel文件|导入excel文件后端php处理导入的数据并存入数据库需要前后端结合的demo!