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与数据库的交互不用愁了!!