laravel—Excel 导入导出 应用官方的包 maatwebsite/excel

这篇博客介绍了如何在laravel中使用maatwebsite/excel包进行Excel的导入和导出操作,包括简单版和复杂版的示例。在导入部分,博主提到了laravel官方包存在的小数丢失问题,并推荐了使用PhpOfficePhpSpreadsheetIOFactory作为替代方案。导出部分则详细讲解了如何处理多维表头的复杂场景,并配以需求图和效果图。
摘要由CSDN通过智能技术生成

导入:简单版 

public function import(Request $request)
{
    $filePath = "public" . $request->get("path");
    try {
        Excel::load($filePath, function ($reader) {
            //获取excel的第几张表
            $reader = $reader->getSheet(1);
            //获取表中的数据
            $data = $reader->toArray();
            for ($row = 3; $row < count($data); $row++) {
                $food = Food::where("name", $data[$row]['1'])->first();
                if (!empty($food)) continue;
                $list = new Food();
                $list->type = $data[$row]['2'];
                $list->code = $data[$row]['0'];
                $list->name = $data[$row]['1'];
                $list->norm = $data[$row]['6'];
                $list->save();
            }
        });
        return response()->json(["code" => CodeUtil::SUCCESS, 'msg' => "成功"]);
    } catch (\Exception $e) {
        return response()->json(["code" => CodeUtil::ERROR, 'msg' => "失败"]);
    }

}

 

复杂版

 

注:下面的换了一个包,laravel官网的包导入时丢失小数(坑),转用tp框架的包,还蛮好用的

use PhpOffice\PhpSpreadsheet\IOFactory;

public function import(Request $request)
{
    $now = Carbon::now()->toDateString();
    $s = Sale::where("time", $now)->first();
    if (!empty($s)) return response()->json(["code" => CodeUtil::ERROR, 'msg' => "今日数据已导过"]);
    $filePath = public_path($request->get("path"));
    $objReader = IOFactory::createReader('Xlsx');
    $spreadsheet = $objReader->load($filePath); //载入excel表格
    $reader = $spreadsheet->getSheet(0)->toArray();
    $reader1 = $spreadsheet->getSheet(0);
    $row_num = $reader1->getHighestRow(); // 总行数
    $m = 0;//获取最后一列数
    foreach ($reader[3] as $v) {
        $m++;
    }
    try {
        $list = new Sale();
        $list->bill_num = $reader1->getCellByColumnAndRow($m, 5)->getValue();
        $list->people_num = $reader1->getCellByColumnAndRow($m, 6)->getValue();
        $list->run_price = $reader1->getCellByColumnAndRow($m, 7)->getValue();
        $list->discount_price = $reader1->getCellByColumnAndRow($m, 9)->getValue();
        $list->tip = $reader1->getCellByColumnAndRow($m, 10)->getValue();
        $list->time = Carbon::now()->toDateString();//今天;
        $list->save();
        $n = 0;
        for ($i = 11; $i <= $row_num; $i++) {
            $name = $reader1->getCellByColumnAndRow(1, $i)->getValue();
            if ($name == "优惠组成") {
                $n = $i;
                break;
            }
        }

        for ($i = 11; $i < $n; $i++) {
            $sale_income
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值