laravel-导入EXCEL

简介: laravel-导入EXCEL

导入EXCEL

  • 视图
<input type="file" id="inputExcel" style="display: none" accept=".xlsx, .xls"  data-url="{{url(strtolower($model).'/import')}}">
<button type="reset" class="layui-btn layui-btn-warm" id="import_csv"><i class="layui-icon layui-icon-upload-circle  layuiadmin-button-btn"></i>导入</button>
  • JS
// EXCEL导入
    $(document).on('click', '#import_csv', function () {
        $('#inputExcel').click();
    });
    $('#inputExcel').on('change', function (e) {
        console.log(e);
        var file = this.files[0];
        var formData = new FormData();
        formData.append('file', file);
        var url = $(this).data('url'); // 获取 data-url 属性的值
        $.ajax({
            url: url,
            data: formData,
            type: 'POST',
            contentType: false,
            processData: false,
            dataType: 'json',
            cache: false,
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            success: function (res) {
                // 处理上传成功的回调
                history.go(0);
                alert(res.msg);
            },
            error: function (err) {
                // 处理上传失败的回调
                console.error('Upload error:', err);
            }
        });
    })
  • 导入的方法封装在了Services,采取注入的方式来实例调用,这里只演示导入
<?php
namespace App\Services;
use App\Models\Test;
use Illuminate\Http\Request;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Illuminate\Support\Facades\DB;
class TestService
{
     public static function import(Request $request)
    {
        // 判断当前请求是否为POST请求,并且检查是否存在名为file的上传文件。如果条件成立,则继续执行代码;否则返回错误信息
        if ($request->isMethod('post') && $request->hasFile('file')) {
            // 生成一个唯一的文件名,使用当前时间戳和一个随机数进行MD5加密,最后加上后缀名.xlsx。
            $fileName = md5(microtime(true) . mt_rand(1000, 9999)) . '.xlsx';
            // 获取应用程序根目录下的/storage/app/public/uploads目录,并将其赋值给变量$root。
            $root = storage_path('/public/uploads/');
            // 生成一个以当前日期为名称的子目录,用于存放上传的Excel文件。
            $savePath = 'importExcel/' . date('Ymd') . '/';
            // 将上传文件的路径设置为$root与$savePath的拼接结果。
            $path = $root . $savePath;
            // is_dir查上传文件的目录是否存在,如果不存在则创建该目录。
            if (!is_dir($path)) {
                // mkdir($path, 0777, true) 该方法创建名为$path的目录,并赋予最大的权限
                if (false === @mkdir($path, 0777, true) && !is_dir($path)) {
                    throw new \Exception('存储文件夹创建失败:' . $path);
                }
            }
            // 组合出完整的文件路径。
            $filePath = $path . $fileName;
            // 将上传的Excel文件保存到服务器上指定的位置
            if ($request->file('file')->move($path, $fileName)) {
                // 加载Excel文件
                $spreadsheet = IOFactory::load($filePath);
                // 获取第一个工作表
                $worksheet = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
                // 获取A1单元格的值
                // $value = $worksheet->getCell('A1')->getValue();
                // 处理Excel文件内容并保存到数据库中
                DB::beginTransaction();
                try {
                    foreach ($worksheet as $key => $value) {
                        //  跳过表头
                        if ($key == 1) continue;
                        // 跳过空行
                        if (empty($value['A'])) continue;
                        $model = new Test;
                        $model['name'] = $value['A'];
                        // 当参数为false时,会禁用数据验证,直接保存数据到数据库中。而当参数为true时,会强制进行数据验证,
                        $model->saveOrFail([
                            'timestamps' => false,
                        ]);
                    }
                    DB::commit();
                    return response()->json(['code' => 0, 'msg' => '文件上传成功']);
                } catch (\Exception $e) {
                    DB::rollBack();
                    return response()->json(['code' => 1, 'msg' => $e->getMessage()]);
                }
            } else {
                return response()->json(['code' => 1, 'msg' => '文件上传失败']);
            }
        } else {
            return response()->json(['code' => $request, 'msg' => 'Error!']);
        }
    }
}
  • 调用import方法
<?php
namespace App\Http\Controllers\Admin;
use App\Helpers\Common;
use App\Models\Test;
use App\Services\TestService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class TestController  extends BaseController
{
    // 在 `TestController` 中添加一个构造函数,并在其中注入 `TestService` 实例。
    protected $testService;
    public function __construct(TestService $testService)
    {
        $this->testService = $testService;
    }
    // 导入EXCEL
    public function import(Request $request)
    {
        return $this->testService->import($request);
    }
}
相关文章
|
6月前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
267 0
|
6月前
|
关系型数据库 MySQL 区块链
将excel表格数据导入Mysql新建表中
将excel表格数据导入Mysql新建表中
|
2月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
5月前
|
SQL 存储 数据库
excel导入sql数据库
将Excel数据导入SQL数据库是一个相对常见的任务,可以通过多种方法来实现。以下是一些常用的方法: ### 使用SQL Server Management Studio (SSMS) 1
|
3月前
|
关系型数据库 MySQL Windows
MySQL数据导入:MySQL 导入 Excel 文件.md
MySQL数据导入:MySQL 导入 Excel 文件.md
|
4月前
|
存储 关系型数据库 MySQL
Excel 导入 sql3
【7月更文挑战第18天】
46 2
|
3月前
|
前端开发 easyexcel
SpringBoot+Vue3实现Excel导入
SpringBoot+Vue3实现Excel导入
110 0
|
5月前
|
easyexcel Java API
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
1065 1
|
4月前
|
前端开发 JavaScript PHP
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
技术心得:前端点击按钮,导入excel文件,上传到后台,excel接收和更新数据
52 0
|
4月前
|
JSON JavaScript 数据格式
vue 电子表格Excel的上传导入、导出下载、读取本地Excel、json转Excel
vue 电子表格Excel的上传导入、导出下载、读取本地Excel、json转Excel
332 0

热门文章

最新文章