如何检查Excel文件的第一行或哪些列在Laravel Excel中是否有效?

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,lastnameusername.

但是,如果first name缺少第一个非属性行(引用列名的属性行)的值(或任何attritbute值),则提供的脚本将返回false,即使excel文件具有所有firstname,lastnameusername属性.

所以我将脚本修改为:

  1. 首先,我读了excel文件.我还声明了一个布尔变量来标记excel文件是否有效.

$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();

$excelIsValid = false;
Run Code Online (Sandbox Code Playgroud)
  1. 然后我循环遍历所有的结果,并检查是否至少一次,全部所需要的值(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在循环的末尾,那么该文件没有一次具有所需的所有属性.这意味着文件为空,具有错误的属性名称,或者没有任何有效行.简而言之,该文件无效,不应该在系统中.

Mar*_*łek 8

我准备了这个示例脚本:

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.如果有错误将其设置$isErrortrue和路线它会显示一个模板.