如何从maatwebsite / Excel

时间:2018-08-19 20:02:40

标签: excel laravel file-upload

我正在使用软件包maatwebsite/excel v2.1将用户导入页面。

我已经上传了文件,但是我想先向用户显示他正在导入什么以及不能导入哪些行(因为缺少数据或用户已经存在),但是为此我想至少添加2个多余的字段,1会告诉我该行是否可以上传(出于审美目的),并且带有文字的顺序告诉他为什么不能将该行导入该行。

我得到这样的文件行

$users = Excel::load($ruta.'/'.$filename, function ($reader) {
})->get();

这将返回此集合,其中第一个值为用户分配了电子邮件test@subject.com,第二个rif字段的格式错误

[
    {
        "email": "test@subject.com",
        "empresa": "bussines1",
        "encargado": "person1",
        "rif": "J-12345-1",
    },
    {
        "email": "test@subject2.com",
        "empresa": "bussines2",
        "encargado": "Person 2",
        "rif": "123456-2",

    }
]

我想要的是添加这样的额外字段

[
    {
        "email": "test@subject.com",
        "empresa": "bussines1",
        "encargado": "person1",
        "rif": "J-12345-1",
        "validity": 0,
        "reason": "Email is already used"
    },
    {
        "email": "test@subject2.com",
        "empresa": "bussines2",
        "encargado": "Person 2",
        "rif": "123456-2",
        "validity": 0,
        "reason": "the rif field is bad formated" 
    }
]

正如我所说,这些字段并不是要保存在文档中,而是用于向用户显示将要导入什么,不导入什么以及为什么不导入的图例。

我知道我可以在回调函数中检查所需的内容,但是如何将这些值插入到集合中?

1 个答案:

答案 0 :(得分:1)

您可以使用for i, row in df.iterrows(): sql = "SELECT * FROM `Table_Name` WHERE `key` = '{}'".format(row.Key) found = pd.read_sql(sql, con=Engine) if len(found) == 0: df.iloc[i:i+1].to_sql(name="Table_Name",if_exists='append',con = Engine) 方法来操作所有收集项。

map()

但是请注意,我们正在将阵列发回。当您尝试以迭代方式访问数据时(可能在您看来),您不能说$ user-> email,它将抛出$users = Excel::load($ruta.'/'.$filename, function ($reader) { })->get(); $newUsers = $users->map(function($user){ return [ "email" => $user->email, "empresa" => $user->empresa, "encargado" => $user->encargado, "rif" => $user->rif, // make your controls and add new items here "validity" => $validate, "reason" => $reason ] }) ,所以您应该说Trying to get property of non-object ..