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

wgxvkvu9  于 2023-03-31  发布在  其他
关注(0)|答案(3)|浏览(182)

我试图在阅读其他行之前检查用户上传的excel文件是否具有正确的列/第一行/属性。我使用的是Laravel 4和MaatWebsite's Laravel Excel。
我创建了一个函数,允许用户通过导入Excel文件来更新系统数据库的员工表。
现在正确的Excel文件,有,让我们说,3列:firstnamelastnameusername。如果excel文件具有所有这些属性/列,我现在将读取下面的每一行并验证每一行,到目前为止,这并不是我的问题的一部分。
但是如果Excel文件中没有任何3属性/列,我会忽略请求并返回错误。
我尝试使用这个,它获取lastname属性:

$sample = Excel::selectSheetsByIndex(0)->load($readFile, function($reader){})->get(array("lastname"));

但是,即使没有找到lastname,$sample仍然不是null,所以我将无法检查lastname是否存在。
如何检查属性/列是否存在?

更新日期:

如果attributes行之后的第一行包含所有需要的属性,那么我选择的答案将非常有效。例如:如果它具有firstnamelastnameusername的值。
但是,如果第一个非属性行(属性行引用列名)的first name值(或任何属性值)丢失,则提供的脚本将返回false,即使excel文件具有所有firstnamelastnameusername属性。
所以我把脚本修改成这样:
1.首先,我读取了excel文件。我还声明了一个布尔变量来标记excel文件是否有效。
$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();

$excelIsValid = false;

1.然后循环所有结果,检查是否至少有一次所有需要的值(firstnamelastnameusername)都已设置或存在。

foreach($excelChecker as $ex){

    if(isset($ex["lastname"]) && isset($ex["firstname"]) && isset($ex["username"])){
         $excelIsValid = true;
   }
}

说明:

如果$excelIsValid在循环结束时仍然是false,则该文件没有一次具有所需的所有属性。这意味着该文件为空,具有错误的属性名称,或者没有任何有效的行。简而言之,该文件无效,不应该在系统中。

lhcgjxsq

lhcgjxsq1#

我准备了这个示例脚本:

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');
    }
});

脚本加载文件并检查是否有你想要的列。它不检查是否有更多的列-当然,如果你想,你可以添加exta check -count($firstow) == 3。如果有错误,它设置$isErrortrue,并在路由显示一个模板。

wztqucjr

wztqucjr2#

在Laravel Excel 3.1中,您可以使用

public function import()
        {
            $column= (new HeadingRowImport)->toArray('users.xlsx');

            if (isset($column['firstname']) && isset($column['lastname']) &&  isset($column['username'])) {
                 //dd('columns found');
                 //your code
            }else{
                //dd('columns not found');
                //if not found show error or something
            }

        }

你可以在里面做任何事,如果不然,或者你可以用你的逻辑

uqzxnwby

uqzxnwby3#

该包支持导入文件验证。
您可能希望在将每一行插入数据库之前对其进行验证。通过实现WithValidation关注点,您可以指示每行需要遵守的规则

**rules()**方法,期望返回一个带有Laravel验证规则的数组。

请检查https://docs.laravel-excel.com/3.1/imports/validation.html

相关问题