ユーザーがアップロードした Excel ファイルに、他の行を読み込む前に正しい列/最初の行/属性があるかどうかを確認しようとしています。MaatWebsite のLaravel Excelで Laravel 4 を使用しています。
ユーザーが 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
存在するかどうかを確認することはできません。
属性/列が存在するかどうかを確認するにはどうすればよいですか?
アップデート:
属性行の後の最初の行に必要な属性がすべて含まれている場合、選択した答えは完全に機能します。firstname
例: 、lastname
、およびの値がある場合username
。
ただしfirst name
、最初の非属性行 (列名を参照する属性行) の値 (またはその属性値) が欠落している場合、Excel ファイルにすべての属性が含まれていても、提供されたスクリプトは false を返します。firstname
、lastname
、およびusername
属性。
そこで、スクリプトを次のように変更しました。
- まず、エクセルファイルを読み込みます。また、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
、ファイルに必要なすべての属性が一度もありませんでした。これは、ファイルが空であるか、属性名が間違っているか、有効な行がないことを意味します。つまり、ファイルは無効であり、システムに存在するべきではありません。