热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

laravel导入导出Excel操作

官方文档:https:docs.laravel-excel.com3.1getting-started​​​​​​Excel导入:composer安

官方文档:

https://docs.laravel-excel.com/3.1/getting-started/​​​​​​

Excel导入:


  1. composer安装maatwebsite/excel包

    composer require maatwebsite/excel
  2. 创建导入类

    php artisan make:import FilesInfoImport
  3. 打开文件FilesInfoImport,按照以下格式写入

    namespace App\Imports;use App\Models\FilesInfo;
    use Maatwebsite\Excel\Concerns\ToModel;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Collection;
    use Maatwebsite\Excel\Concerns\Importable;class FilesInfoImport implements ToModel
    {use Importable;/*** @param array $row** @return \Illuminate\Database\Eloquent\Model|null*/public function model(array $row){return new FilesInfo([//FilesInfo为文件表的Model名称(自己新建),正常引用你所导入的表的Model]);}
    }

  4. 控制器方法

    public function filesInfoImport(Request $request){$c = 0;if ($request->hasFile('file')) {$file = $request->file('file')->store('/excel');$tmp_file = 'storage/' . $file;$data = (new FilesInfoImport())->toArray($tmp_file);if (!empty($data)) {$arr0 = array_shift($data[0]);//删除Excel第一行[标题]$arr = $data[0];foreach ($arr as $rows) {$item = FilesInfo::create(['number' => $rows[0],'filetype' => $rows[1],'name' => $rows[2],//.......所有字段]);if ($item) {$c++;} else {exit(json_encode(array('code'=>1, 'msg'=>"部分数据上传失败,已上传".$c."条!")));}}exit(json_encode(array('code'=>1, 'msg'=>'全部提交成功!')));}else{exit(json_encode(array('code'=>0, 'msg'=>'无文件上传!')));}}else{exit(json_encode(array('code'=>0, 'msg'=>'请选择上传文件!')));}}

  5. html(该前端框架使用的layui)


  6. js

    $('#import_btn').on('click', function () {var type = $(this).data('type');active[type] ? active[type].call(this) : '';
    });upload.render({elem: '#import_btn',url: '/admin/filesInfoImport' //此处配置你自己的上传接口即可,accept: 'file' //普通文件,field: "file",exts:'xls|xlsx|csv' //允许上传的类型,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。layui.layer.load();this.data={//传给后台的参数}},done: function(res){if(res.code==1){layui.layer.closeAll();return layer.msg(res.msg);}else{layui.layer.closeAll();return layer.msg(res.msg);}},error: function(msg){//请求异常回调layui.layer.closeAll();return layer.msg('上传失败,请重新上传');}});

注意:

如果导入后,无法访问该文件,是访问地址的问题??

        1.需要建立软连接命令:php artisan storage:link

        2.如果建立软连接后依旧访问有问题,是因为软连接指定的目录与实际上传的目录不匹配,需要修改上传文件的指定目录

        config/filesystems.php下的

        'root' => storage_path('app'),改为'root' => storage_path('app/public'),

本地能正常上传,线上服务器上传失败

报错:

ErrorException: touch(): Unable to create file
/data/www/***/***/storage/framework/laravel-excel/laravel-excel-
nTTU18NFIgWFB1tGe6nn8RLlICp8U6aj.xls because Permission denied in file
/data/www/***/***/vendor/maatwebsite/excel/src/Files/LocalTemporaryFile.php on line

需要在服务器项目文件夹内运行:sudo chmod -R 777  ***(文件地址)

给storage文件夹设置777权限

Excel导出:


  1. html

  2. js

    $('#export_btn').on('click', function () {window.open("/admin/zdjbExportZf?year=" + $("#year").val()+ '&IDCard='+$(".search_IDCard").val())
    });

  3. 控制器

    public function zdjbExportZf(Request $request){ini_set('max_execution_time', 60000);$key = $request->request->all();$main = new Zdjb();$where = [];//查询条件if ($key) {foreach ($key as $k => $v) {if ($v!=null&&$v!="") {switch ($k) {case 'year':array_push($where, ['year', $v]);break;}}}}//根据条件查询sql数据$res = $main->where($where)->get()->toArray();//遍历sql数据foreach ($res as $k => &$v) {$v['index'] = $k+1;//$v['IDCard'] = $v['IDCard'] . ' ';//身份证号加空格,excel不会显示###//如果直接取字段的表内获取的值,在$field直接写字段名即可,比如以上身份证需要转化加空格,需要再次遍历一次,无特殊条件,无需遍历}$head = ['序号','编号','单位名称','姓名','身份证号','开户名','银行账号','开户银行','联系电话','补偿金额(元)','结算日期'//...];$field = ['index','字段名称1','字段名称2''字段名称3''字段名称4''字段名称5''字段名称6''字段名称7''字段名称8''字段名称9''字段名称10'//...];//字段名$body = $res;//内容$main->daochu('导出表', $head, $field, $body,$time);//调用导出的方法}

  4. 调用的导出方法(导出时可设置样式)

    public function daochu(string $title, array $head, array $field, array $body, array $time) //字段一一对应{$spreadsheet &#61; new Spreadsheet();$worksheet &#61; $spreadsheet->getActiveSheet();//设置工作表标题名称--最下角的sheet名称$worksheet->setTitle(&#39;文档&#39;);$worksheet->setCellValueByColumnAndRow(1,1,$title);//传来的表格标题$worksheet->mergeCellsByColumnAndRow(1,1,11,1);//合并单元格$worksheet->setCellValueByColumnAndRow(1,2,&#39;统计日期&#xff1a;2022-05-20 至 2022-05-21&#39;);$worksheet->mergeCellsByColumnAndRow(1,2,11,2);//合并统计日期的单元格$worksheet->setCellValueByColumnAndRow(4,3,&#39;人员信息&#39;);$worksheet->mergeCellsByColumnAndRow(4,3,9,3);//设置头部格式$spreadsheet->getActiveSheet()->getRowDimension(&#39;1&#39;)->setRowHeight(33.95);$worksheet->getStyle(&#39;A1:K1&#39;)->getFont()->setBold(true)->setSize(18);$spreadsheet->getActiveSheet()->getStyle(&#39;A2:K2&#39;)->getFont()->setName(&#39;Arial&#39;)->setSize(9);//设置尾部格式$spreadsheet->getActiveSheet()->getRowDimension(count($body)&#43;5)->setRowHeight(26.25);$worksheet->setCellValueByColumnAndRow(9,(count($body)&#43;5),&#39;合计:&#39;);$spreadsheet->getActiveSheet()->setCellValue(&#39;J&#39;.(count($body)&#43;5), "&#61;SUM(J5:J".(count($body)&#43;4).")");$worksheet->mergeCellsByColumnAndRow(1,(count($body)&#43;6),11,(count($body)&#43;6));$worksheet->mergeCellsByColumnAndRow(1,(count($body)&#43;7),11,(count($body)&#43;7));$total &#61; count($body) &#43; 8;$worksheet->mergeCellsByColumnAndRow(1,$total,3,$total);$worksheet->setCellValueByColumnAndRow(1,$total,&#39;初审人&#39;);$worksheet->mergeCellsByColumnAndRow(4,$total,6,$total);$worksheet->setCellValueByColumnAndRow(4,$total,&#39;复核人&#39;);$worksheet->mergeCellsByColumnAndRow(7,$total,8,$total);$worksheet->setCellValueByColumnAndRow(7,$total,&#39;XX签字&#39;);$worksheet->mergeCellsByColumnAndRow(9,$total,11,$total);$worksheet->setCellValueByColumnAndRow(9,$total,&#39;XX签字&#39;);$worksheet->mergeCellsByColumnAndRow(1,$total&#43;1,3,$total&#43;1);$worksheet->mergeCellsByColumnAndRow(4,$total&#43;1,6,$total&#43;1);$worksheet->mergeCellsByColumnAndRow(7,$total&#43;1,8,$total&#43;1);$worksheet->mergeCellsByColumnAndRow(9,$total&#43;1,11,$total&#43;1);$worksheet->setCellValueByColumnAndRow(1,$total&#43;1,&#39;年 月 日&#39;);$worksheet->setCellValueByColumnAndRow(4,$total&#43;1,&#39;年 月 日&#39;);$worksheet->setCellValueByColumnAndRow(7,$total&#43;1,&#39;年 月 日&#39;);$worksheet->setCellValueByColumnAndRow(9,$total&#43;1,&#39;年 月 日&#39;);$spreadsheet->getActiveSheet()->getRowDimension($total)->setRowHeight(26.25);$spreadsheet->getActiveSheet()->getRowDimension($total&#43;1)->setRowHeight(81.75);$spreadsheet->getActiveSheet()->getRowDimension($total&#43;2)->setRowHeight(17.1);$styleArray &#61; [&#39;alignment&#39; &#61;> [&#39;horizontal&#39; &#61;> \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,&#39;vertical&#39; &#61;> \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER //垂直居中],];$worksheet->getStyle(&#39;J3&#39;)->getAlignment()->setWrapText(true);$worksheet->getStyle(&#39;C&#39;)->getAlignment()->setWrapText(true);$worksheet->getStyle(&#39;J&#39;)->getAlignment()->setWrapText(true);$worksheet->getStyle(&#39;A1&#39;)->applyFromArray($styleArray);$worksheet->getStyle(&#39;A3:K&#39;.($total))->applyFromArray($styleArray);$styleArray1 &#61; [&#39;alignment&#39; &#61;> [&#39;horizontal&#39; &#61;> \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT,],];$worksheet->getStyle(&#39;A&#39;.($total&#43;1).&#39;:K&#39;.($total&#43;2))->applyFromArray($styleArray1);$worksheet->getStyle(&#39;A3:K&#39;.($total&#43;2))->getFont()->setSize(9);$worksheet->mergeCellsByColumnAndRow(1,$total&#43;2,3,$total&#43;2);$worksheet->setCellValueByColumnAndRow(1,$total&#43;2,&#39;打印日期: &#39; . date(&#39;Y-m-d&#39;));$spreadsheet->getActiveSheet()->getColumnDimension(&#39;A&#39;)->setWidth(4.33);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;B&#39;)->setWidth(8.57);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;C&#39;)->setWidth(25.3);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;D&#39;)->setWidth(7.03);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;E&#39;)->setWidth(16.33);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;F&#39;)->setWidth(7.17);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;G&#39;)->setWidth(18.67);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;H&#39;)->setWidth(14.33);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;I&#39;)->setWidth(10.5);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;J&#39;)->setWidth(9.67);$spreadsheet->getActiveSheet()->getColumnDimension(&#39;K&#39;)->setWidth(8.83);$styleArray2 &#61; [&#39;borders&#39; &#61;> [&#39;allBorders&#39; &#61;> [&#39;borderStyle&#39; &#61;> \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,&#39;color&#39; &#61;> [&#39;argb&#39; &#61;> &#39; 0xFF000000&#39;],],],];$worksheet->getStyle(&#39;A3:K&#39;.($total-3))->applyFromArray($styleArray2);$worksheet->getStyle(&#39;A&#39;.($total).&#39;:K&#39;.($total&#43;1))->applyFromArray($styleArray2);//表头//设置单元格内容foreach ($head as $k &#61;> $v) {$col &#61; $k &#43; 1;if($k>&#61;3&&$k<&#61;8){$row &#61; 4;}else{$row &#61; 3;$worksheet->mergeCellsByColumnAndRow($col,3,$col,4);}$worksheet->setCellValueByColumnAndRow($col, $row, $v);}$len &#61; 5;$j &#61; 0;foreach ($body as $k &#61;> $v) {$row &#61; $k &#43; 5;for ($n &#61; 0; $n setCellValueByColumnAndRow($col, $row, $val);}$spreadsheet->getActiveSheet()->getRowDimension($row)->setRowHeight(25);}$filename &#61; "{$title}.xlsx";header(&#39;Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&#39;);header(&#39;Content-Disposition: attachment;filename&#61;"&#39; . $filename . &#39;"&#39;);header(&#39;Cache-Control: max-age&#61;0&#39;);$writer &#61; IOFactory::createWriter($spreadsheet, &#39;Xlsx&#39;);$writer->save(&#39;php://output&#39;);}

  5. 导出样式如下&#xff1a;


推荐阅读
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
author-avatar
huangzhu321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有