当前位置: 首页 > 编程日记 > 正文

Laravel 上使用 phpexcel的两种方式


原创 2017年06月24日 20:24:31
  • 1229

文章采集与网上

方式1。使用原生的phpexcel ,

http://blog.csdn.net/CSwfe/article/details/52748046?locationNum=1



1、在app目录下创建一个新的文件夹,命名libs(可自定义)  app/libs/phpExcel


2、(可选)考虑到后面可能会引用很多库,so,在libs下再创建一个phpExcel文件夹,把phpExcel类放入此文件夹下。


3、找到根目录下的composer.json文件


4、找到composer.json中定义的(看我备注)
//加入phpExcel类的路径


[html]view plain copy
  1.    "autoload": {    
  2.   
  3.   
  4.          "classmap": [    
  5.   
  6.   
  7.               "database",    
  8.   
  9.   
  10.                "app/libs/phpExcel"    
  11.   
  12.   
  13.           ],    
  14.   
  15.   
  16.       "psr-4": {    
  17.   
  18.   
  19.             "App\\": "app/"    
  20.   
  21.   
  22.        }  
  23.   
  24.   
  25. },  



5、安装composer,windows下可以在百度上下载


6、运行命令行进入项目根目录,执行“composer dumpautoload”,


7、在控制器中use PHPExcel


8、在方法中实例化phpExccel对象,打印该对象看phpExcel类是否引入成功。


     $objPHPExcel = new PHPExcel();


     print_r($objPHPExcel);


==========以上是引入phpExcel类步骤(其它第三方类与此类似)============
 
    <span style="font-size:18px;">以下开始excel导入导出</span>  




//导出     控制器中use PHPExcel;  use IOFactory;
 


[php]view plain copy
  1. public function phpexcel()    
  2. {    
  3.     
  4.        //$objPHPExcel = new PHPExcel();    
  5.     
  6.        //print_r($objPHPExcel);    
  7.     
  8.         $query =DB::table('goods')->get();    
  9.     
  10.         //$query =$this ->db->query($sql);    
  11.     
  12.        //print_r($query);    
  13.     
  14.         if(!$query)return false;    
  15.     
  16.         //Starting the PHPExcel library    
  17.     
  18.         //加载PHPExcel类    
  19.     
  20.        //$this->load->library('PHPExcel');    
  21.     
  22.         //$this->load ->library('PHPExcel/IOFactory');    
  23.     
  24.         $objPHPExcelnew PHPExcel();    
  25.     
  26.         include_once('../app/libs/phpexcel/phpexcel/IOFactory.php');    
  27.     
  28.         $objPHPExcel->getProperties()-> setTitle("export") ->setDescription("none");    
  29.     
  30.         $objPHPExcel-> setActiveSheetIndex(0);    
  31.     
  32.         //Fieldnamesinthefirstrow    
  33.     
  34.         $fields = DB::select("select COLUMN_NAME from information_schema.COLUMNS where    
  35.     
  36.            table_name = 'goods';");    
  37.     
  38.        //print_r($fields);die;    
  39.     
  40.         $col = 0;    
  41.     
  42.        foreach($fields as $field){    
  43.     
  44.             $field =$field['COLUMN_NAME'];    
  45.     
  46.             $objPHPExcel-> getActiveSheet() -> setCellValueByColumnAndRow($col, 1,$field);    
  47.     
  48.             $col++;    
  49.     
  50.         }    
  51.     
  52.        // die;    
  53.        //Fetchingthetabledata    
  54.     
  55.        $row = 2;    
  56.     
  57.         foreach($query as $data)    
  58.         {    
  59.     
  60.              $col =0;    
  61.     
  62.              foreach($fields $field)    
  63.     
  64.              {    
  65.     
  66.                  //print_r($data);    
  67.     
  68.                  $field =$field['COLUMN_NAME'];    
  69.     
  70.                  $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col,$row,!empty($data["$field"])?$data["$field"]:'');    
  71.     
  72.                  $col++;    
  73.     
  74.              }    
  75.     
  76.             $row++;    
  77.     
  78.         }    
  79.     
  80.         //die;    
  81.     
  82.         $objPHPExcel-> setActiveSheetIndex(0);    
  83.     
  84.         $objWriter =IOFactory :: createWriter($objPHPExcel'Excel5');    
  85.     
  86.         //Sendingheaderstoforcetheusertodownloadthefile    
  87.     
  88.         header('Content-Type:application/vnd.ms-excel');    
  89.     
  90.        //header('Content-Disposition:attachment;filename="Products_' .date('dMy') . '.xls"');    
  91.     
  92.         header('Content-Disposition:attachment;filename="Brand_' .date('Y-m-d') . '.xls"');    
  93.     
  94.         header('Cache-Control:max-age=0');    
  95.     
  96.         $objWriter-> save('php://output');    
  97.     
  98.     }    
  99.   
  100.   
  101.   
  102.   
  103.   
  104.   
  105.   
  106.   
  107.   
  108.      控制器中use IOFactory;   use PHPExcel_Cell;  
  109.   
  110.   
  111.   
  112. public function ru(Request $request){    
  113.        $tmp_file =$_FILES ['file_stu'] ['tmp_name'];    
  114.     
  115.        $file_types =explode ( "."$_FILES ['file_stu'] ['name'] );    
  116.     
  117.        $file_type =$file_types [count ( $file_types ) - 1];    
  118.     
  119.        /*判别是不是.xls文件,判别是不是excel文件*/    
  120.     
  121.        if (strtolower$file_type ) != "xls"){    
  122.     
  123.           $this->error ( '不是Excel文件,重新上传' );    
  124.     
  125.        }    
  126.     
  127.        $savePath ="./excel/";    
  128.     
  129.        /*以时间来命名上传的文件*/    
  130.     
  131.        $str =date('Ymdhis');    
  132.     
  133.        $file_name =$str . "." . $file_type;    
  134.     
  135.        //echo$file_name;die;    
  136.     
  137.        $request->file('file_stu')->move($savePath$file_name);    
  138.     
  139.        /*是否上传成功*/    
  140.     
  141.        /*if(!copy($tmp_file,$savePath.$file_name)){  
  142.   
  143.           $this->error ( '上传失败' );  
  144.   
  145.        }*/    
  146.     
  147.        //要获得新的文件路径+名字    
  148.     
  149.        $fullpath =$savePath.$file_name;    
  150.     
  151.        //echo$fullpath;die;    
  152.     
  153.        $re =$this->read($fullpath,'utf-8');    
  154.     
  155.        //print_r($re);die;    
  156.     
  157.        for($i=1;$i<count($re);$i++){    
  158.     
  159.           //print_r($re);    
  160.     
  161.           //echo$re[$i][1];    
  162.     
  163.           $adds =DB::table('goods')->insert(['gname' => $re[$i][1], 'gprice' =>$re[$i][2]]);    
  164.     
  165.        }    
  166.     
  167.        //die;    
  168.     
  169.        if($adds){    
  170.     
  171.             echo"<script>alert('导入成功');location.href='daoru'</script>";    
  172.     
  173.         }else{    
  174.     
  175.             echo"<script>alert('导入失败');location.href='daoru'</script>";    
  176.     
  177.         }    
  178.     
  179.      
  180.     
  181.     }    
  182.     
  183. public function read($filename,$encode='utf-8')    
  184. {    
  185.     
  186.  // ../  一般情况不管处于什么子目录子需要这样子即可 例如\app\Admin\Controllers\WechatMercharntPay\OrderListTodayController.php  
  187.         include_once('../app/libs/phpexcel/phpexcel/IOFactory.php');    
  188.     
  189.         //$this->load ->library('PHPExcel/IOFactory');    
  190.     
  191.         $objReader =IOFactory::createReader('Excel5');    
  192.     
  193.         $objReader->setReadDataOnly(true);    
  194.     
  195.         $objPHPExcel$objReader->load($filename);    
  196.     
  197.         $objWorksheet$objPHPExcel->getActiveSheet();    
  198.     
  199.         $highestRow =$objWorksheet->getHighestRow();    
  200.     
  201.         //echo$highestRow;die;    
  202.     
  203.         $highestColumn = $objWorksheet->getHighestColumn();    
  204.     
  205.         //echo$highestColumn;die;    
  206.     
  207.         $highestColumnIndex =PHPExcel_Cell::columnIndexFromString($highestColumn);    
  208.     
  209.         $excelData =array();    
  210.     
  211.         for($row = 1;$row <= $highestRow$row++) {    
  212.     
  213.             for ($col= 0; $col < $highestColumnIndex$col++) {    
  214.     
  215.                    $excelData[$row][]=(string)$objWorksheet->getCellByColumnAndRow($col,$row)->getValue();    
  216.     
  217.              }    
  218.     
  219.         }    
  220.     
  221.         return $excelData;    
  222.     
  223. }    





phpExcel导入导出终于完成了,赶快尝试一下吧


第二方法 用集成方法  maatwebsite 集成类,但是不支持一些文件。已经修复

http://blog.csdn.net/zhwxl_zyx/article/details/47251491 

并修复其中的问题 

\vendor\maatwebsite\excel\src\Maatwebsite\Excel\Readers\LaravelExcelReader.php

修改后的版本

https://github.com/yanggg1133/Laravel-Excel

增加 

[php]view plain copy
  1. /* 
  2. * @desc 返回所有数据 
  3. * @author 绍兴远帆软件有限公司 主营 ewshop网店系统 远帆自动售货机系统 手机话费流量充值系统 票务销售系统 点餐外卖系统 网店进销存系统 
  4. * @website http://www.ewshop.net/ 
  5. * */  
  6. public function readAll()  
  7. {  
  8.   
  9.     // ../  一般情况不管处于什么子目录子需要这样子即可 例如\app\Admin\Controllers\WechatMercharntPay\OrderListTodayController.php  
  10.     //include_once('../app/libs/phpexcel/phpexcel/IOFactory.php');  
  11.   
  12.     //$this->load ->library('PHPExcel/IOFactory');  
  13.   
  14.   
  15.     //$this->reader =IOFactory::createReader('Excel5');  
  16.   
  17.     //$this->reader->setReadDataOnly(true);  
  18.   
  19.     $objPHPExcel$this->excel;  
  20.   
  21.     $objWorksheet$objPHPExcel->getActiveSheet();  
  22.   
  23.     $highestRow =$objWorksheet->getHighestRow();  
  24.   
  25.     //echo$highestRow;die;  
  26.   
  27.     $highestColumn = $objWorksheet->getHighestColumn();  
  28.   
  29.     //echo$highestColumn;die;  
  30.   
  31.     $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);  
  32.   
  33.     $excelData =array();  
  34.   
  35.     for($row = 1;$row <= $highestRow$row++) {  
  36.   
  37.         for ($col= 0; $col < $highestColumnIndex$col++) {  
  38.   
  39.             $excelData[$row][]=(string)$objWorksheet->getCellByColumnAndRow($col,$row)->getValue();  
  40.   
  41.         }  
  42.   
  43.     }  
  44.   
  45.     return $excelData;  
  46.   
  47. }  

Laravel 4

Laravel 5

[plain]view plaincopy
  1. "require-dev": {
  2. "fzaninotto/faker": "~1.4",
  3. "mockery/mockery": "0.9.*",
  4. "phpunit/phpunit": "~4.0",
  5. "phpspec/phpspec": "~2.1",
  6. "maatwebsite/excel": "~2.0.0"
  7. },


添加完后执行 composer update


After updating composer, add the ServiceProvider to the providers array in app/config/app.php

You can use the facade for shorter code. Add this to your aliasses:

The class is binded to the ioC as excel



Laravel 4

Laravel Excel includes several config settings for import-, export-, view- and CSV-specific settings. Use the artisan publish command to publish the config file to your project.

The config files can now be found at app/config/packages/maatwebsite/excel

Laravel 5

To publish the config settings in Laravel 5 use:

This will add an excel.php config file to your config folder.


详细用法请参考官网 http://www.maatwebsite.nl/laravel-excel/docs/getting-started

转载于:https://www.cnblogs.com/mouseleo/p/8628169.html

相关文章:

剑指offer-----Python-----栈

用两个栈实现队列 题目&#xff1a;用两个栈来实现一个队列&#xff0c;完成队列的Push和Pop操作。队列中元素为int类型. 首先&#xff0c;栈都是先进后出&#xff0c;但是队列呢&#xff0c;一般是先进先出。也就是创建两个栈stack1和stack2&#xff0c;使用两个“先进后出”的…

【工具软件】markdown编译器待办事项无法打勾

使用时可以直接点击上方工具栏的 List item 注意&#xff1a;此时已经自动在里面加了一个空格&#xff0c;如果直接加x的话&#xff0c;不会打勾&#xff0c;如下&#xff1a;[ x] List item 所以先删除空格在加x 问题解决

【转】创建不可见的Activity

在android开发中有时候会用到一些后台的Activity&#xff0c;但又不适合使用service&#xff0c;比如直接点击程序图标时只是执行一段代码&#xff0c;不需要弹出程序界面。此时可以在项目的AndroidManifest.xml文件中相应的Activity标签中添加这样一行&#xff1a;android:the…

关于 TApplication 详解 三 ---- TComponent

ComponentCount属性 对应对象&#xff1a;所有组件 声明&#xff1a;property ComponentCount: Integer; 功能&#xff1a;此属性在运行时有效&#xff0c;它是只读型。同时它标明组件具有的组件数。当用户在设计时可以在窗体上放置一个组件&#xff0c;因此此窗体将变为…

[转载] K3 K3c 最简单无损开壳方法

只用一把螺丝刀就行了&#xff0c;其它什么撬棒 信用卡 撬片等 拆机工具一概不用。拆了5台&#xff0c;只有一台断了一个扣口。1. 把底部4个螺丝拿掉。2.把路由如图放在桌子上&#xff0c;路由平行于身体&#xff0c;注意是立着放 使路由与桌子接触的部分成30度角。这样使一侧…

图像处理随笔知识

采样频率&#xff1a; 采样频率是指1s内采样的次数&#xff0c;反映了采样点之间的间隔大小。 采样频率越高&#xff0c;得到的图像样本越逼真&#xff0c;图像质量越高&#xff0c;但要求的存储量也越大。 图像量化&#xff1a; 要用多大范围的数值来表示图样采样之后的每一个…

一则android软件开发工程师的招聘信息

岗位职责&#xff1a; 从事Android平台的客户端软件开发 任职资格&#xff1a; 1、一年以上Android平台开发经验&#xff1b; 2、两年以上Java开发经验&#xff1b; 3、熟悉Android开发架构和API调用&#xff1b; 4、熟悉HTTP、TCP/IP通讯协议&#xff1b; 5、熟悉面向对象编程…

【数据库】数据库基本操作

操作练习&#xff1a; 创建数据库 删除数据库 修改数据库配置 创建数据表 修改表结构 ———————————— 添加字段 修改字段 重命名字段 更改主键 删除字段 ———————————— 重命名表名 删除表 截断表 表数据的操作 添加数据 修改数据 删除数…

USERADD命令详解

2019独角兽企业重金招聘Python工程师标准>>> 1.作用useradd命令用来建立用户帐号和创建用户的起始目录&#xff0c;使用权限是终极用户。2.格式useradd [&#xff0d;d home] [&#xff0d;s shell] [&#xff0d;c comment] [&#xff0d;m [&#xff0d;k templat…

tensorflow入门(二)

import numpy as np import tensorflow as tf import matplotlib.pyplot as plt#使用numpy生成200个随机点 x_data np.linspace(-0.5,0.5,200)[:,np.newaxis] noise np.random.normal(0,0.02,x_data.shape) y_data np.square(x_data) noise#定义两个placeholder x tf.plac…

DRF序列化和反序列化

一、自定义序列化组件 新建一个任意名的py文件&#xff0c;里面导入serlizerfrom rest_framework import serializers自定义一个类继承serializers&#xff0c;里面写需要序列化的字段方法一&#xff1a;继承serializers.Serializerclass BookSerlizer(serializers.Serializer)…

设计模式学习笔记-中介模式

概述&#xff1a; 用中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以对立地改变他们之间的…

【数据库】兴唐第二十七节课之jdbc的使用

使用jdbc修改数据库表中的信息 package java27practice;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;public class JDBCDemo {public static void main(String[] args) {Connection conn null;Stat…

windows 2008 R2无法创建性能收集器

问题&#xff1a; 检查排除方法&#xff1a; 1.确保用户有权限 Http://technet.microsoft.com/zh-cn/library/cc749154(WS.10).aspx &#xff08;参考&#xff1a; 2.确保 Distributed Transaction Coordinator服务 及Task Scheduler服务有启动。 3.检查 C:\Windows\System32\T…

Silverlight WCF RIA服务(二十三)Silverlight 客户端 4

DomainDataSource WCF RIA Services提供DomainDataSource控件来简化用户界面和域上下文中数据的交互。通过DomainDataSource&#xff0c;我们可以只是用声明性语法来检索、编辑数据。我们指定域上下文与DomainDataSource一起使用&#xff0c;然后通过这个上下文来调用操作。Dom…

Storm Trident示例function, filter, projection

以下代码演示function, filter, projection的使用&#xff0c;可结合注释 省略部分代码&#xff0c;省略部分可参考&#xff1a;https://blog.csdn.net/nickta/article/details/79666918 FixedBatchSpout spout new FixedBatchSpout(new Fields("user", "score…

解决 sh: java: command not found 问题

在执行脚本上加入如下配置即可#!/bin/bashJAVA_HOME/usr/java/jdk1.8.0_152export PATH$PATH:$JAVA_HOME/bin转载于:https://www.cnblogs.com/jimw/p/11126437.html

【数据库】 兴唐第二十七节课只sql注入

首先来一个用户登录程序 public static void login(String username, String password) {Connection conn null;Statement stat null;ResultSet rs null; try {Class.forName("com.mysql.jdbc.Driver");String url "jdbc:mysql://127.0.0.1:3306/tyrantfor…

SIEM部署的几条最佳实践

2010年11月12号&#xff0c;NetworkWorld发表了一篇文章——《SIEM部署的最佳实践》&#xff0c;业界同仁给出了他的一些建议。 这些建议主要是针对Verizon2010年的那个DBIR报告中提到的日志缺失造成的严重问题。 至于建议&#xff0c;主要有&#xff1a; 1&#xff09;先要搞明…

ffmpeg解码视频存为BMP文件

ffmpeg解码视频存为BMP文件 分类&#xff1a; ffmpeg2011-07-28 12:13 8人阅读 评论(0) 收藏 举报view plain#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #pragma once #ifdef __cplusplus extern …

(四)Asp.net web api中的坑-【api的返回值】

&#xff08;四&#xff09;Asp.net web api中的坑-【api的返回值】 原文:&#xff08;四&#xff09;Asp.net web api中的坑-【api的返回值】void无返回值IHttpActionResultHttpResponseMessage自定义类型我这里并不想赘述这些返回类型&#xff0c; 可以参考博文http://blog.c…

如何提高编程能力?

其实很多人学编程都会遇到困难&#xff0c;我觉得其中一个根本原因是他们没搞明白学编程到底是学什么。编程不是一种知识&#xff0c;而是一门手艺。我们从小到大的学习都是学习知识&#xff0c;流程一般是课前看书预习&#xff0c;上课听讲&#xff0c;下课做作业&#xff0c;…

【HTML】兴唐第二十八节课之初识HTML

1、HTML&#xff1a;hyper text markup language&#xff08;超级文本标记语言&#xff09;算编程&#xff0c;但HTML不是编程语言 2、注意&#xff1a; &#xff08;1&#xff09;所有的HTML文件都是以.html或者htm作为扩展名 &#xff08;2&#xff09;html文件需要被浏览…

Nagios插件NDOUtils安装

1.DBI的安装# wget http://www.cpan.org/modules/by-module/DBI/DBI-1.608.tar.gz # tar zxvf DBI-1.608.tar.gz # cd DBI-1.608# perl Makefile.PL# make# make test# make install2.DBD的安装# wget http://www.cpan.org/modules/by-module/DBD/DBD-mysql-4.011.tar.gz # tar…

maven 获取pom.xml的依赖---即仓库搜索服务

常用仓库地址&#xff1a; http://repository.sonatype.org/ (https://repository.sonatype.org/)如下图&#xff1a; http://www.mvnrepository.com 转载于:https://www.cnblogs.com/hblthink/p/8643137.html

XFile 关键帧动画的解析遇到的问题

一、mesh 数据储存方式的修改 由于在设计CXFileMesh类时考虑不够全面&#xff0c;原CXFileMesh 类内部储存mesh数据采用的是vector模板。这使后来试图为该类添加支持3dsmax关键帧动画功能时带来很大麻烦。最后还是对CXFileMesh 类做了整体修改&#xff1a;用二叉树储存mesh数据…

【HTML】兴唐二十八节课之常用标签(不定期更新)

部分属性的详细参数见菜鸟教程 &#xff08;1&#xff09;换行 <br/> (2)字体设置颜色和大小 <font size 6 color blue>小米巨能写</font> &#xff08;3&#xff09;添加图片 <img src "index.jpg" width "300px"> 注&…

Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

这是因为Python3中&#xff0c;str的输出是调用类的实例方法__str__来输出&#xff0c;如果__str__方法没有重写&#xff0c;则自动继承object类的__str__方法&#xff0c;而object类的__str__方法是调用__repr__方法&#xff0c;因此自定义类未重写__str__方法的情况下&#x…

IT人士的人际关系压力

感谢听心心理学网站的投递在造成IT从业者的众多压力之中&#xff0c;人际关系带来的压力或许是最明显并且循环效应最强的一种。IT行业的冷漠环境是出了名的&#xff0c;在这样的状态之下&#xff0c;如何调整我们的人际关系&#xff0c;将恶性循环改造成良性循环&#xff0c;对…

软件工程网络15结对编程作业

软件工程网络15结对编程作业 1.项目成员 学号&#xff1a;201521123014 博客地址&#xff1a;http://www.cnblogs.com/huangsh/学号&#xff1a; 201521123102 博客地址&#xff1a;http://home.cnblogs.com/u/hyy786030686/结对编程码云项目地址&#xff1a;https://gitee.com…