2

ユーザーがアップロードした Excel ファイルに、他の行を読み込む前に正しい列/最初の行/属性があるかどうかを確認しようとしています。MaatWebsite のLaravel Excelで Laravel 4 を使用しています。

ユーザーが Excel ファイルをインポートして、システムのデータベースの従業員テーブルを更新できる機能を作成しました。

正しい Excel ファイルには、たとえば、3 つの列があります: firstnamelastname、および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 を返します。firstnamelastname、およびusername属性。

そこで、スクリプトを次のように変更しました。

  1. まず、エクセルファイルを読み込みます。また、Excel ファイルが有効かどうかを示すブール変数も宣言しました。

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

$excelIsValid = false;
  1. 次に、すべての結果をループして、少なくとも 1 回、必要なすべての値 ( firstnamelastname、およびusername) が設定されているか、存在するかどうかを確認します。

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

説明:

$excelIsValidまだループの最後にある場合はfalse、ファイルに必要なすべての属性が一度もありませんでした。これは、ファイルが空であるか、属性名が間違っているか、有効な行がないことを意味します。つまり、ファイルは無効であり、システムに存在するべきではありません。

4

2 に答える 2

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

スクリプトはファイルをロードし、必要な列があるかどうかを確認します。さらに列があるかどうかはチェックしません-もちろん、必要に応じて追加のチェックを追加できます- count($firstow) == 3。エラーがある場合は、ルートに設定$isErrortrue、テンプレートを表示します。

于 2014-09-25T07:22:42.490 に答える