首页 > 编程语言 >ThinkPHP6之Excel解析

ThinkPHP6之Excel解析

时间:2024-08-01 13:55:15浏览次数:15  
标签:return Excel ThinkPHP6 file fail message 解析 validate

PhpSpreadsheet解析Excel文件

安装 PhpSpreadsheet

通过 Composer 安装了 PhpSpreadsheet:

composer require phpoffice/phpspreadsheet

控制器

ExcelController

<?php

namespace app\controller;

use think\facade\Db;
use think\facade\Request;
use think\facade\View;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

class ExcelController
{
    public function upload()
    {
        // 获取上传的文件
        $file = Request::file('file');

        if (!$file) {
            return json(['status' => 'fail', 'message' => 'No file uploaded']);
        }

        /* 验证文件类型和大小
        $validate = [
            'size' => 10485760, // 10MB
            'ext' => 'xls,xlsx',
        ];
        $fileInfo = $file->validate($validate);
        if (!$fileInfo) {
            return json(['status' => 'fail', 'message' => $file->getError()]);
        }*/
		
        // thinkphp6验证文件类型和大小
        $validate = Validate::rule([
            'file' => 'file|fileExt:xls,xlsx|fileSize:10485760', // 10MB
        ]);
        $data = ['file' => $file];
        if (!$validate->check($data)) {
            return json(['status' => 'fail', 'message' => $validate->getError()]);
        }

        // 将文件保存到临时路径
        $savePath = $file->getPathname();

        try {
            // 解析Excel文件
            $spreadsheet = IOFactory::load($savePath);
            $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);

            // 开启数据库事务
            Db::startTrans();
            try {
                // 批量插入数据到数据库
                foreach ($sheetData as $index => $row) {
                    if ($index == 0) {
                        // 跳过第一行标题行
                        continue;
                    }

                    // 假设有三列需要插入到数据库
                    Db::table('your_table_name')->insert([
                        'column1' => $row['A'],
                        'column2' => $row['B'],
                        'column3' => $row['C'],
                    ]);
                }

                // 提交事务
                Db::commit();
                return json(['status' => 'success', 'message' => 'Data imported successfully']);
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                return json(['status' => 'fail', 'message' => 'Data import failed: ' . $e->getMessage()]);
            }

        } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
            return json(['status' => 'fail', 'message' => 'Error reading file: ' . $e->getMessage()]);
        }
    }
}

路由配置

use think\facade\Route;

Route::post('upload-excel', 'ExcelController/upload');

前端

<form action="/upload-excel" method="post" enctype="multipart/form-data">
    <label for="file">选择 Excel 文件:</label>
    <input type="file" name="file" id="file" accept=".xlsx,.xls">
    <input type="submit" value="上传并解析">
</form>

标签:return,Excel,ThinkPHP6,file,fail,message,解析,validate
From: https://www.cnblogs.com/aeolian/p/18336516

相关文章

  • 【Dash】Dash链接 csv/excel 文件
    一、Dash如何连接csv数据?Thereareamanywaystoadddatatoanapp:APIs,externaldatabases,local.txt files,JSONfiles,andmore.Inthisexample,wewillhighlightoneofthemostcommonwaysofincorporatingdatafromaCSVsheet.#Importpackages......
  • PDF解析,还能做得更好
    随着大模型文档智能应用逐渐步入正轨,文档解析类产品成为其中重要的一环。文档解析工具能够“唤醒”沉睡在PDF文件中的知识,将其转化为机器能够识别、读取的信息,将可用数据从txt、csv格式扩展到大批量的电子档、扫描档文件,为数据处理、大模型训练、RAG系统开发提供优质的“燃料”。......
  • Magic-PDF:端到端PDF文档解析神器 构建高质量RAG必备!
    项目结构流程解析预处理的作用是判断文档内容是否需要进行OCR识别,如果是普通可编辑的PDF文档,则使用PyMuPDF库提取元信息。模型层除了常规的OCR、版面结构分析外,还有公式检测模型,可提取公式内容,用于后续把公式转化为Latex格式。但是目前暂无表格内容识别,官方预计1个月之内会放......
  • 数据探索的聚宝盆:sklearn中分层特征聚类技术全解析
    数据探索的聚宝盆:sklearn中分层特征聚类技术全解析在机器学习领域,聚类是一种无监督学习方法,用于将数据集中的样本划分为若干个组或“簇”,使得同一组内的样本相似度高,而不同组间的样本相似度低。当数据集中包含分层特征时,即特征本身具有某种层次结构,传统的聚类算法可能无法......
  • Android开发 - (适配器)Adapter类中CursorAdapter实现类详细解析
    作用将Cursor对象中的数据与AdapterView组件(如ListView、GridView等)进行绑定。以下是CursorAdapter的主要作用:1.数据源绑定数据源连接:CursorAdapter通过Cursor对象作为数据源,实现了从数据库或其他数据源(如ContentResolver查询结果)中读取数据的功能。这使得开发者能够轻松地......
  • Python操作excel常用操作介绍,入门首选
            使用Python操作Excel文件有许多常用操作。以下是一些常见的操作及其简要描述,下面是全面详细的示例,展示如何使用Python操作Excel文件,我们将使用pandas和openpyxl库来进行各种操作。常用库pandas:用于数据分析和处理,支持读取和写入Excel文件。openpyxl:用于读......
  • Python 复选框和 Excel
    我有一个Python系统,它收集用户的条目,进行计算并显示结果。当用户单击条目数据按钮时,所有数据条目和结果都会转换为Excel。在系统界面中有是部分的复选框,结果显示在Excel中。我需要一个助手来编写代码,以便我可以在每次用户选择选定的复选框时转换结果,将复选框的每......
  • 无线可穿戴数字听诊器解决方案特色解析
    前记 随着可穿戴技术的不断进步,以及医疗健康领域的数字化进程不断加快。听诊器的数字化逐步市场提到了一个必须要解决的问题,鉴于此,团队在深耕生理信号采集的过程中,不断完善可穿戴数字听诊器的方案。经过长时间的努力,做出来一系列基于低功耗蓝牙的可穿戴听诊器解决方案。可以满......
  • C++面向对象编程解析
    文章目录1.概述2.作用解析3.概念解析1.类和对象2.封装(Encapsulation)3.继承(Inheritance)4.多态(Polymorphism)1.概述C++是在C语言的基础上增加了面向对象编程(OOP)特性的编程语言。面向对象编程是一种编程范式,通过将程序组织成对象的集合,这些对象包含数据和行......
  • 二维数组下载为excel(导出)
    /*导出*/ consts2ab=function(s){ constbuf=newArrayBuffer(s.length); constview=newUint8Array(buf); for(leti=0;i<s.length;i++)view[i]=s.charCodeAt(i)&0xFF; returnbuf; } constexportClick=asyncfunction(){ //多个组数据......