Laravel Excel的简单安装及使用

  后台操作数据库时经常会在数据和Excel之间进行大量地导入导出操作,从我的亲身经历来看最近导表也不下百份,以往的shell脚本已经不能满足现在的需求了,所以刚好就碰到了Laravel Excel这款强大的工具,不过网上的资料也许太多导致之前安装都出了一些问题,所以专程记录一下避免以后再绕弯路。

  之前我把Excel数据导入数据库都是通过shell脚本处理,先把excel的内容拷贝到一个txt文档里,注意所有的excel单位格必须填充内容(null值填写为'空'或者'无'),然后所有数据不能换行,并且去除txt文件如 ‘,’’和空格这些符号,最后再用readline方法,以'    '为分隔符获取每一列的数据:

cat temp.txt|awk 'NR>1'|while read line
do
    myDate=`echo $line|awk -F'    ' '{printf("%s",$1)}'`
    myIn=`echo $line|awk -F'    ' '{printf("%s",$2)}'`
    myOut=`echo $line|awk -F'    ' '{printf("%s",$3)}'`
    remark=`echo $line|awk -F'    ' '{printf("%s",$4)}'`
    'mysql -hxxx -uxxx -pxxx --default-character-set=utf8'-N -e"
   insert into t_record(myDate,myIn,myOut,remark) values('$myDate','$myIn','$myOut','$remark');
  "
done

  这种方法比较复杂,对txt的要求比较高,一旦数据量大一些或者存在换行的情况就十分容易出错,恰好自己现在开发的项目用到Laravel框架,所以就索性全部用其自带的Excel来完优化导表过程吧。

  安装:

  Laravel Excel是一款既可以执行Excel数据导入也可以执行Excel导出的工具,其官方文档可以参考http://www.maatwebsite.nl/laravel-excel/docs。在安装这个插件之前首先确保你的电脑或者服务器安装了composer,没安装的可以参考http://www.jianshu.com/p/256547b495c2,当你在命令行下输入composer出现几个大大的Composer时说明已经安装成功了。

  首先打开要添加插件的那个项目的composer.json文件,由于我当时用的是Lavarel4所以在require部分添加''maatwebsite/excel'':''~1.3'',如果是Laravel5则添加    ''maatwebsite/excel'':''~2.1.0'',随后执行composer update命令就可以把所需要的文件夹下载到你的项目中。值得注意的是如果你只想更新Excel这个插件 可以直接执行   composer update maatwebsite/excel 命令,因为执行composer update会把所有需要更新的内容都update一遍,网络差,耗时长的情况下简直是噩梦,所以建议需要哪个东西才更新哪个,不要一下子全部更新了。

  更新成功后,在你的vendor目录下会出现maatwebsite和phpoffice这两个文件夹,如果没有继续回去更新吧(试试国内的镜像)。然后在config/app.php内引入两行说明:

在providers的数组里添加'Maatwebsite\Excel\ExcelServiceProvider'

在aliases里添加'Excel' => 'Maatwebsite\Excel\Facades\Excel'

  最后再在项目的根目录下执行php artisan config:publish maatwebsite/excel命令,如果是5则执行php artisan vendor:publish就完成整个安装过程,其实整个过程并不复杂,只要看到那两个文件夹出现了,就有十之八九了。

  使用:

首先在具体的Controller的Php文件里加上 use Maatwebsite\Excel\Facades\Excel;

然后可以通过创建一个Excel对象或者直接调用Excel类里的方法来实现导出导入功能

//创建对象导入数据(类的话直接使用 Excel::load()方法)
$excel = App::make('excel');//excel类
$excel->load("/temp.xlsx", function($reader) //reader读取excel内容
{
    $reader = $reader->getSheet(0);//excel第一张sheet
    $results = $reader->toArray();
    unset($results[0]);//去除表头
    if ($results)
    {
        foreach ($results as $key => $value)
        {
            $data = [];
            $data['myDate'] = $value[0] == null ? '':trim($value[0]);
            $data['myIn'] = $value[1] == null ? '' : trim($value[1]);
            $data['myOut'] = $value[2] == null ? '' : trim($value[2]);
            $data['remark'] = $value[3] == null ? '' : trim($value[3]);
                
            $res = DB::table('t_record')->insertGetId($data);
        }
    }
});
//使用类的方法导出excel
//
创建一个文件并导出 $test='第一个位置'; Excel::create("new.xlsx", function($excel) use($test) { //创建sheet $excel->sheet('sheet1',function($sheet) use($test) { //填充每个单元格的内容 $sheet->cell('A1',function($cell) use ($test) { $cell->setValue($test); }); }); })->export('xls'); //读取一个文件并导出 Excel::load("new.xlsx", function($excel) { //读取sheet $excel->sheet('sheet1',function($sheet) { //修改每个单元格的内容 $sheet->cell('A1',function($cell) { $cell->setValue('1'); }); }); })->export('xls');

 

除此之外还有例如为excel设置标题、字体大小、单元格的大小、背景颜色、宽度、高度、水平、垂直居中、外边距、内边距等等,功能十分强大,让你感觉你不仅仅是在导出一个excel而是在写一个html+css的页面,具体的需求功能可以参考其API文档。好了,以后的excel与数据库的交互不用愁了!!

 

posted @ 2016-09-13 20:33  前后维谷  阅读(14875)  评论(0编辑  收藏  举报