当前位置: 首页 > 知识库问答 >
问题:

使用Excel::Import在Maatwebsite/Laravel Excel 3.1上导入CSV

荣轶
2023-03-14

我已将Maatwebsite/Laravel Excel从2.1升级到3.1。有些方法已被弃用。

下面是2.1版的代码。

$data = Excel::load($path, function($reader) {})->get()->toArray();

当我使用2.1的时候,它是工作的,但是在我升级之后,它是错误的

调用未定义的方法Maatsite\Excel\Excel::加载()

对于3.1版本,我尝试更改为

$data = Excel::import($path, function($reader) {})->get()->toArray();

我知道这可能不是正确的语法。

这里我的完整代码时,使用2.1开发。

$path = $request->file('csv_file')->getRealPath();

    if ($request->has('header')) {
        $data = Excel::import($path, function($reader) {})->get()->toArray();
    } else {
        $data = array_map('str_getcsv', file($path));
    }

    if (count($data) > 0) {
        if ($request->has('header')) {
            $csv_header_fields = [];
            foreach ($data[0] as $key => $value) {
                $csv_header_fields[] = $key;
            }
        }
        $csv_data = array_slice($data, 0, 8);

        $csv_data_file = CsvData::create([
            'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
            'csv_header' => $request->has('header'),
            'csv_data' => json_encode($data)
        ]);
    } else {
        return redirect()->back();
    }

    return view('import.import_field', compact( 'csv_header_fields', 'csv_data', 'csv_data_file'));

如何在3.1版上修复此错误?

共有3个答案

乜思淼
2023-03-14

不要返回降级,您可以使用最简单的导入方法轻松使用新的更新版本(“maatwebsite/excel”:“~3.1.0”)。

更新Composer.json。。

 "require": {
    **"maatwebsite/excel": "~3.1.0"**
},
  • 创建导入以在cmd中运行此命令

php artisan make:import UsersImport

>

  • 它将在app\imports\UserImport.php中创建导入

    <?php
    namespace App\Imports;
    
    use Illuminate\Support\Collection;
    use Maatwebsite\Excel\Concerns\ToCollection;
    use Maatwebsite\Excel\Concerns\WithHeadingRow;
    
    class UserImport implements ToCollection,WithHeadingRow
    {
    
    public function collection(Collection $rows)
    {
    
        return $rows;
    
    }
    
    // headingRow function is use for specific row heading in your xls file
    public function headingRow(): int
    {
        return 3;
    }
    }
    ?>
    

    在控制器文件中。。

     use Excel;
    
    public function importExcel(Request $request) {
    
     $import = new UsersImport();
     $data = \Excel::import($import, request()->file('import_file'));
    
     }
    

  • 别俊誉
    2023-03-14

    import()方法的第一个参数不再是3.1中文件的路径,而是必须创建的导入文件的类名。

    在此导入文件中,可以定义如何读取图纸,以及要将图纸转换为何种格式,例如模型或集合。

    从2.1迁移到3.1的最简单方法是通过运行(在您的情况下)创建这样的导入类:

    php artisan make:import CsvDataImport 
    

    如果您想一次读取所有至行,如在问题代码中,您可以使用导入文件中的来收集关注点:

    use Illuminate\Support\Collection;
    use Maatwebsite\Excel\Concerns\ToCollection;
    
    class CsvDataImport implements ToCollection
    {
        public function collection(Collection $rows)
        {
            // Use the $rows collection to create your CsvData model.
        }
    }
    

    在Controller中,您可以这样调用导入:

    use App\Imports\CsvDataImport;
    use Maatwebsite\Excel\Excel;    
    
    Excel::import(new CsvDataImport, $path);
    

    您可以在这里阅读更多关于导入到集合的信息

    江鸿羲
    2023-03-14

    实际上,在Maatwebsite/Laravel Excel版本3中,不需要为Excel导入创建任何额外的类。基本上,您可以使用与版本2中几乎相同的方式完成整个CSV到阵列的转换:

        $path = $request->file('csv_file')->getRealPath();
        $data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];
    
     类似资料:
    • 导入 Stylus支持字面@import CSS, 也支持其他Stylus样式的动态导入。 字面CSS 任何.css扩展的文件名将作为字面量。例如: @import "reset.css" 渲染如下: @import "reset.css" Stylus导入 当使用@import没有.css扩展,会被认为是Stylus片段(如:@import "mixins/border-radius")。 @i

    • 本文向大家介绍python import 上级目录的导入,包括了python import 上级目录的导入的使用技巧和注意事项,需要的朋友参考一下 有时候我们可能需要import另一个路径下的python文件,例如下面这个目录结构,我们想要在_train.py里import在networks目录下的_lstm.py和上级目录下的_config.py。 只需两步操作 (1)在networks文件夹下

    • 5.2. 使用 from module import 导入模块 Python 有两种导入模块的方法。两种都有用,你应该知道什么时候使用哪一种方法。一种方法, import module,你已经在第 2.4 节 “万物皆对象”看过了。另一种方法完成同样的事情,但是它与第一种有着细微但重要的区别。 下面是 from module import 的基本语法: from UserDict import

    • 实际上,我已经使用Node.js和mongoDB完成了一个示例项目,它允许用户保存注释,现在我正在进行导出和导入 点击导出按钮,会下载一个带有用户名和备注字段的excel文件,用户必须在下载的excel文件中写入用户名和备注,现在点击导入按钮,会显示一个对话框,它会显示一个选择文件的按钮。这里我们需要选择和上传excel 上传成功后,数据将存储在mongoDB数据库中。 我已经使用javascri

    • 主要内容:import 模块名 as 别名,from  模块名 import 成员名 as 别名使Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说,在前面章节中,我们使用了一些数学函数,例如余弦函数 cos()、绝对值函数 fabs() 等,它们位于 Python 标准库中的 math(或 cmath)模块中,只需要将此模块导入到当前程序,就可以直接拿来用。 前面章节中,已经看到使用 import 导入模块的语法,但实际上

    • 上一个小节中我们学习到了如何提取样式并进行导入,但是在某些情况下我们可能需要对导入的样式文件有一些需求,比如标识一个文件的类型。我们就需要对导入文件进行配置(拓展)从而让编译机制可以识别我们的需求。 1. 语法定义 Less offers several extensions to the CSS @import CSS at-rule to provide more flexibility ov