我试图在阅读其他行之前检查用户上传的excel文件是否具有正确的列/第一行/属性。我使用的是Laravel 4和MaatWebsite's Laravel Excel。
我创建了一个函数,允许用户通过导入Excel文件来更新系统数据库的员工表。
现在正确的Excel文件,有,让我们说,3列:firstname
、lastname
和username
。如果excel文件具有所有这些属性/列,我现在将读取下面的每一行并验证每一行,到目前为止,这并不是我的问题的一部分。
但是如果Excel文件中没有任何3属性/列,我会忽略请求并返回错误。
我尝试使用这个,它获取lastname
属性:
$sample = Excel::selectSheetsByIndex(0)->load($readFile, function($reader){})->get(array("lastname"));
但是,即使没有找到lastname
,$sample仍然不是null,所以我将无法检查lastname
是否存在。
如何检查属性/列是否存在?
更新日期:
如果attributes行之后的第一行包含所有需要的属性,那么我选择的答案将非常有效。例如:如果它具有firstname
、lastname
和username
的值。
但是,如果第一个非属性行(属性行引用列名)的first name
值(或任何属性值)丢失,则提供的脚本将返回false,即使excel文件具有所有firstname
,lastname
和username
属性。
所以我把脚本修改成这样:
1.首先,我读取了excel文件。我还声明了一个布尔变量来标记excel文件是否有效。$excelChecker = Excel::selectSheetsByIndex(0)->load('path/to/file', function($reader){})->get()->toArray();
$excelIsValid = false;
1.然后循环所有结果,检查是否至少有一次所有需要的值(firstname
、lastname
和username
)都已设置或存在。
foreach($excelChecker as $ex){
if(isset($ex["lastname"]) && isset($ex["firstname"]) && isset($ex["username"])){
$excelIsValid = true;
}
}
说明:
如果$excelIsValid
在循环结束时仍然是false
,则该文件没有一次具有所需的所有属性。这意味着该文件为空,具有错误的属性名称,或者没有任何有效的行。简而言之,该文件无效,不应该在系统中。
3条答案
按热度按时间lhcgjxsq1#
我准备了这个示例脚本:
脚本加载文件并检查是否有你想要的列。它不检查是否有更多的列-当然,如果你想,你可以添加exta check -
count($firstow) == 3
。如果有错误,它设置$isError
为true
,并在路由显示一个模板。wztqucjr2#
在Laravel Excel 3.1中,您可以使用
你可以在里面做任何事,如果不然,或者你可以用你的逻辑
uqzxnwby3#
该包支持导入文件验证。
您可能希望在将每一行插入数据库之前对其进行验证。通过实现WithValidation关注点,您可以指示每行需要遵守的规则。
**rules()**方法,期望返回一个带有Laravel验证规则的数组。
请检查https://docs.laravel-excel.com/3.1/imports/validation.html