【问题标题】:Import Excel Sheet in Laravel and show the extracted data in UI在 Laravel 中导入 Excel 工作表并在 UI 中显示提取的数据
【发布时间】:2019-06-05 05:16:27
【问题描述】:

我在前端使用 Angular 4,在后端使用 Laravel 5.2。我想从 UI 导入 Excel 工作表,将值存储在 DB 中,检索值并使用 Angular 在 UI 中显示它们。

为此,我在 laravel 中使用 Maatwebsite/Excel 包。我的 Excel 工作表具有以下结构。

名称 |详情 |价格
专家PHP |在线教程 | 100
你好 |代码 | 200

我的 laravel 代码如下: 这里 myFile 是以文件路径和名称为值的键。

    $File = $request->file('myFile');
    $path = $request->file('myFile')->getRealPath();
    $real_name = $File->getClientOriginalName();
    $data = Excel::load($path)->get();

    if($data->count()){
        foreach($data as $key => $value){
            $arr[] = ['name' => $value->name, 'details' => $value->details, 'price' => $value->price];
        }
    }

    return response()->success($data);

我的回复如下:

     {
        "errors":false,
        "data":[
                {
                   "namedetailsprice":"expertphp\tOnline tutorials\t100"
                },
                {
                   "namedetailsprice":"hello\tfirst code\t2000"
                }
               ]
      }

我不明白为什么标题会变成一个字段。 感谢任何帮助。

谢谢。

【问题讨论】:

  • 你想在最后显示 $data 变量吗?或 $arr :返回 response()->success($arr);
  • 是的,我想显示 $arr;但是根据当前的代码,它是空的。因此,我返回了 $data

标签: angular laravel csvtoarray


【解决方案1】:

我认为,如果您将代码更改为此代码,它将起作用,或者它会让您更接近您的解决方案:

$File = $request->file('myFile');
$path = $request->file('myFile')->getRealPath();
$real_name = $File->getClientOriginalName();
$data = Excel::load($path)->get();
$returnData = [];

if($data->count()){
    foreach($data as $key => $value){
        $arr = ['name' => $value->name, 'details' => $value->details, 'price' => $value->price];
        array_push($returnData,$arr);
    }
}

return response()->success($returnData);

如果我理解正确,那么您会希望返回这个新的 $returnData 而不是原始加载的 excel 文件。我更改代码的另一个原因是您只保存了一行数据并将其替换为同一数组 $arr 中的另一行。现在它每次都推送新行并保存所有行。

【讨论】:

  • foreach 循环前不需要 if 语句。如果数组为空,则循环不循环;-)
  • @ali... 问题不在于推动数组中的值来克服最重要的问题。问题在于它将整个第一行视为一个字段,而不是将其逐列视为键值对。如果我使用您建议的代码,我会收到此回复。 {"errors":false,"data":[[{"name":null,"details":null,"price":null}],[{"name":null,"details":null,"price ":null},{"name":null,"details":null,"price":null}]]}
  • 你也能发布你的excel文件吗?有些东西看起来不对劲。它包含任何数据吗?
  • 虽然这看起来不太聪明,但尝试将 $data 更改为 $rows 并将代码更改为:foreach($rows as $row => $value)
  • 我碰巧检查了 config/excel.php - 这里对于 csv 文件,分隔符是“,”我尝试在每个值之后添加一个“,”。它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多