chr*_*roy 2 phpexcel laravel laravel-4 laravel-excel
我正在尝试检查用户上传的excel文件是否具有正确的列/第一行/属性,然后再读入其他行.我正在使用Laravel 4和MaatWebsite的 Laravel Excel.
我创建了一个函数,允许用户通过导入excel文件来更新系统数据库的employee表.
现在正确的Excel文件,有,比方说,3列:firstname,lastname,和username.如果excel文件具有所有这些属性/列,我现在将读取以下每一行并验证每一行,这实际上不是我现在问题的一部分.
但是如果excel文件中没有3个属性/列中的任何一个,我将忽略该请求并返回错误.
我尝试使用它,它获取lastname属性:
$sample = Excel::selectSheetsByIndex(0)->load($readFile, function($reader){})->get(array("lastname"));
Run Code Online (Sandbox Code Playgroud)
但即使lastname没有找到,$ sample仍然不为空,所以我无法检查是否lastname存在.
如何检查属性/列是否存在?
更新:
如果属性行之后的第一行具有所有需要的属性,那么我选择的答案将完美地运行.例如:如果有值firstname,lastname和username.
但是,如果first name缺少第一个非属性行(引用列名的属性行)的值(或任何attritbute值),则提供的脚本将返回false,即使excel文件具有所有firstname,lastname和username属性.
所以我将脚本修改为:
$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();
$excelIsValid = false;
Run Code Online (Sandbox Code Playgroud)
然后我循环遍历所有的结果,并检查是否至少一次,全部所需要的值(firstname,lastname,和username)已经被设置或都存在.
foreach($excelChecker as $ex){
if(isset($ex["lastname"]) && isset($ex["firstname"]) && isset($ex["username"])){
$excelIsValid = true;
}
}
Run Code Online (Sandbox Code Playgroud)说明:
如果$excelIsValid仍然false在循环的末尾,那么该文件没有一次具有所需的所有属性.这意味着文件为空,具有错误的属性名称,或者没有任何有效行.简而言之,该文件无效,不应该在系统中.
我准备了这个示例脚本:
Route::get('/', function() {
$isError = false;
Excel::load('file.xls', function($reader) use (&$isError) {
$firstrow = $reader->first()->toArray();
if (isset($firstrow['firstname']) && isset($firstrow['lastname']) && isset($firstrow['username'])) {
$rows = $reader->all();
foreach ($rows as $row) {
echo $row->firstname.' '.$row->lastname.' '.$row->username."<br />";
}
}
else {
$isError = true;
}
});
if ($isError) {
return View::make('error');
}
});
Run Code Online (Sandbox Code Playgroud)
该脚本加载文件并检查是否有您想要的列.它不会检查是否有更多列 - 当然如果你想要你可以添加exta检查 - count($firstow) == 3.如果有错误将其设置$isError到true和路线它会显示一个模板.
| 归档时间: |
|
| 查看次数: |
10317 次 |
| 最近记录: |