用phpexcel导,入,中目前出现2个数据格式问题

WenCheng90 2014-04-24 04:22:03
发布出来 说有非法词组 只能截图了

...全文
1643 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
WenCheng90 2014-04-26
  • 打赏
  • 举报
回复
引用 35 楼 xuzuning 的回复:
真服了你了! 手机号 是Q列,怎么能做时间戳换算呢? 订单付款时间 是S列,为什么不做时间戳换算呢? 数组 $dict 是列号与字段名的对照,不要弄错了 if(in_array($x, array('R', 'S'))) 是判断当前列是否需要做特殊处理(比如转换成时间戳)
额 ,搞定啦 ,谢谢啦 嘿嘿 原谅我的无知吧.....
xuzuning 2014-04-26
  • 打赏
  • 举报
回复
真服了你了! 手机号 是Q列,怎么能做时间戳换算呢? 订单付款时间 是S列,为什么不做时间戳换算呢? 数组 $dict 是列号与字段名的对照,不要弄错了 if(in_array($x, array('R', 'S'))) 是判断当前列是否需要做特殊处理(比如转换成时间戳)
WenCheng90 2014-04-26
  • 打赏
  • 举报
回复
现在 只有2个异常 数据中 手机号(mobile_phone)显示 1.5728490093888e15 订单付款时间(payment_time) 有值显示 2014 没值显示0
xuzuning 2014-04-25
  • 打赏
  • 举报
回复
可能与你的 excel 文件有关 我的代码是基于 #4 贴图示意的
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
把你弟16 行的 getValue() 换成 getFormattedValue() 另外你这个大数也已经超出 mysql int 类型的表示范围,应使用 vchar 或 blogint
我把 16行改成getFormattedValue() ,没反应 112行取消注释 show_dug 就是var_dump 打印$data , $res 都是显示 ["order_number"]=> string(19) "5.9335552883783E+14" 数据类型已经是varchar(25)了
xuzuning 2014-04-25
  • 打赏
  • 举报
回复
把你弟16 行的 getValue() 换成 getFormattedValue() 另外你这个大数也已经超出 mysql int 类型的表示范围,应使用 vchar 或 blogint
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
getFormattedValue 不就是了吗?还要怎么样? Formatted 格式化 getFormattedValue 就是读取在 excel 中看到的被格式化的数据 593355528837832 在 excel 中本身就显示为 5.9335552883783E+14 当需要显示成 593355528837832 时,你要设置单元格格式
 public function read($filename,$encode='utf-8'){
	//         vendor('Excel.PHPExcel');
	        import('Org.Util.PHPExcel');
	//         $upload = \PHPExcel_IOFactory::
	        $objReader = \PHPExcel_IOFactory::createReader(Excel5); 
	        $objReader->setReadDataOnly(true); 
	        $objPHPExcel = $objReader->load($filename); 
	        $objWorksheet = $objPHPExcel->getActiveSheet(); 
	        $highestRow = $objWorksheet->getHighestRow(); 
	        $highestColumn = $objWorksheet->getHighestColumn(); 
	        $highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn); 
	        $excelData = array(); 
	        for ($row = 1; $row <= $highestRow; $row++) { 
	            for ($col = 0; $col < $highestColumnIndex; $col++) { 
	                $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
	            } 
	        } 
	        return $excelData; 
	        
	    } 
	    public function excel(){
	        $this->display();    
	    }
	    public function runexcel(){
	        if (! empty ( $_FILES ['file_stu'] ['name'] )) 
	        
	         {
	            $tmp_file = $_FILES ['file_stu'] ['tmp_name'];
	            $file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
	            $file_type = $file_types [count ( $file_types ) - 1];
	             /*判别是不是.xls文件,判别是不是excel文件*/
	             if (strtolower ( $file_type ) != "xls")              
	            {
	                  $this->error ( '不是Excel文件,重新上传' );
	             }
	            /*设置上传路径*/
	             $savePath = './Uploads/';
	            /*以时间来命名上传的文件*/
	             $str = date ( 'Ymdhis' ); 
	             $file_name = $str . "." . $file_type;
	             /*是否上传成功*/
	             if (! copy ( $tmp_file, $savePath . $file_name )) 
	              {
	                  $this->error ( '上传失败' );
	              }
	            /*
	        
	               *对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
	        
	              注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
	        
	            */
	          $res = $this->read ( $savePath . $file_name );
	           /*
	        
	                重要代码 解决Thinkphp M、D方法不能调用的问题   
	        
	                如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
	        
	            */
	//            spl_autoload_register ( array ('Think', 'autoload' ) );
	           
	           /*对生成的数组进行数据库的写入*/
	          unset($res[1]);
	          $r = 0;
	          $d = 25569;
	          $t = 24 * 60 * 60;
	           foreach ( $res as $k => $v ) 
	           {
	               if ($k != 0) 
	              {
	              	
	                  $data ['order_number'] = $v[0];
	                  $data ['member_name'] = $v[1];
	                  $data ['member_alipay'] = $v[2];
	                  $data ['member_payment'] = $v[3];
	                  $data ['member_postage'] = $v[4];
	                  $data ['membe_integral'] = $v[5];
	                  $data ['aggregate_amount'] = $v[6];
	                  $data ['rebate_integral'] = $v[7];
	                  $data ['member_actual_payments'] = $v[8];
	                  $data ['member_actual_integral'] = $v[9];
	                  $data ['order_status'] = $v[10];
	                  $data ['member_message'] = $v[11];
	                  $data ['consignee_name'] = $v[12];
	                  $data ['consignee_address'] = $v[13];
	                  $data ['Shipping_method'] = $v[14];
	                  $data ['telephone_number'] = $v[15];
	                  $data ['mobile_phone'] = $v[16];
	                  $va = gmdate('Y-m-d H:i:s', ($v[17]- $d) * $t);
	                  $vb = gmdate('Y-m-d H:i:s', ($v[18]- $d) * $t);
	                  $data ['create_time'] = strtotime($va);
	                  $data ['payment_time'] = strtotime($vb);
	                  $data ['baby_title'] = $v[19];
	                  $data ['baby_species'] = $v[20];
	                  $data ['logistics_number'] = $v[21];
	                  $data ['logistics_company'] = $v[22];
	                  $data ['order_remarks'] = $v[23];
	                  $data ['boby_number'] = $v[24];
	                  $data ['shop_id'] = $v[25];
	                  $data ['shop_name'] = $v[26];
	                  $data ['order_closure'] = $v[27];
	                  $data ['seller_service_fee'] = $v[28];
	                  $data ['buyers_service_fee'] = $v[29];
	                  $data ['commercial_invoice'] = $v[30];
	                  $data ['phone_orders'] = $v[31];
	                  $data ['Phase_order_information'] = $v[32];
	                  $data ['deposit_ranking'] = $v[33];
	                  $data ['modified_sku'] = $v[34];
	                  $data ['modified_orders_address'] = $v[35];
	                  $data ['error_info'] = $v[36];
// 	                  show_bug($data);die;
	                  
	                  $r++;
	                  $result = M ( 'financial' )->add ( $data ); 
	                  
	                  
	                 if (! $result) 
	                 {
	                      $this->error ( '导入数据库失败' );
	                  }
	              }
	           }
	           $this->success("导入成功,共导入" . $r . "条数据" ,U('excel'),3);
	        }
	    }
	
我的代码好像用不了getFormattedValue(); 设置单元格格式 已经试过了 没有用
Echo_Smilly 2014-04-25
  • 打赏
  • 举报
回复
用excel解决方法试试,在数字签名添加一个标点 ‘
xuzuning 2014-04-25
  • 打赏
  • 举报
回复
getFormattedValue 不就是了吗?还要怎么样?
Formatted 格式化
getFormattedValue 就是读取在 excel 中看到的被格式化的数据

593355528837832 在 excel 中本身就显示为 5.9335552883783E+14
当需要显示成 593355528837832 时,你要设置单元格格式
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
解决科学计数法的问题 echo $sheet->getCell('A1')->getValue(); //5.9335552883783E+14 改成 echo $sheet->getCell('A1')->getFormattedValue(); //593355528837832 但这对日期效果不好 echo $sheet->getCell('A2')->getFormattedValue(); 得 3/30/14 17:35 还是差强人意点
时间的可以了,科学计数法的 还有别的办法吗?
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
改成($d - 25569) * 86400 电话号码变成这样子了 1.5728490093888e15
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 31 楼 xuzuning 的回复:
转换时间戳没有那么麻烦,#27已经给了 手机号应该是 varchar 类型或无符号整型
现在就是手机就是 varchar(60)啊
xuzuning 2014-04-25
  • 打赏
  • 举报
回复
转换时间戳没有那么麻烦,#27已经给了 手机号应该是 varchar 类型或无符号整型
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 29 楼 xuzuning 的回复:
varchar 型的时间,做判断时比较麻烦

我想以时间戳的形式存
写成
$t[$dict[$x]] = $d ? strtotime(gmdate('Y-m-d H:i:s', ($d - 25569) * 86400)) : '';
可是怎么手机号变成负数时间戳了, 2014 还是有 用的int(10)

xuzuning 2014-04-25
  • 打赏
  • 举报
回复
varchar 型的时间,做判断时比较麻烦
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 26 楼 u012335455 的回复:
[quote=引用 25 楼 xuzuning 的回复:] [create_time] => 2014-03-30 17:35:24 可能是你的字段不是 datetime 或 vchar 吧?
我用的int ,那我试试varchar[/quote] 哦 想起来来了 我用int 是因为我想用时间戳, 我转成时间戳保证到数据库就好了. varchar 型的 时间 可以作为分页排序的判断条件吗?
xuzuning 2014-04-25
  • 打赏
  • 举报
回复
用 int 也是可以的,就是unix时间戳了 gmdate('Y-m-d H:i:s', ($d - 25569) * 86400) 改为 ($d - 25569) * 86400
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 25 楼 xuzuning 的回复:
[create_time] => 2014-03-30 17:35:24 可能是你的字段不是 datetime 或 vchar 吧?
我用的int ,那我试试varchar
xuzuning 2014-04-25
  • 打赏
  • 举报
回复
[create_time] => 2014-03-30 17:35:24 可能是你的字段不是 datetime 或 vchar 吧?
WenCheng90 2014-04-25
  • 打赏
  • 举报
回复
引用 22 楼 xuzuning 的回复:
你 #10 的代码不是在循环里面 $result = M ( 'financial' )->add ( $data ); 的吗? 在 print_r($t); 的位置 $result = M ( 'financial' )->add ( $t ); 不就可以了吗
多谢啊 导入成功了, 可是'R' => 'create_time', 'S' => 'payment_time', 这2个字段在数据库显示都是为2014 ,没有的就是为空
加载更多回复(16)

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧