php读写excel文件

2023-11-06

1.引入包

有不少提供读写excel文件的包,这里选择比较常用的一个,加到自己的项目里就好了。

    "phpoffice/phpspreadsheet": "1.8.2",

2.读取文件

<?php
use PhpOffice\PhpSpreadsheet\IOFactory;

require "vendor/autoload.php";

$f = "/tmp/excelSample.xlsx";

try {
    $inputFileType = IOFactory::identify($f);

    $reader = IOFactory::createReader($inputFileType);

    $spreadSheet = $reader->load($f);

    //获取第几张数据表,默认从0开始
    $sheet = $spreadSheet->getSheet(0);

    //获取最大行数
    $rows = $sheet->getHighestRow();
    
    //获取最大列数
    $cols = $sheet->getHighestColumn();

    //获取全量数据集,返回数组形式数据
    $dataArr = $sheet->rangeToArray('A1:' . $cols . $rows);

    for ($i = 2; $i <= $rows; $i++) {
        //获取一列数据
        $ret['id'][] = $sheet->getCell('A' . $i)->getValue();
    }
}catch (Exception $e) {
    var_dump($e->getMessage());
}

我们把上边的方法改造一下,做个通用的,只需要传入excel文件路径,就可以直接读取文件,返回数组形式的全量数据的方法。

<?php
use PhpOffice\PhpSpreadsheet\IOFactory;

require "vendor/autoload.php";

$filepath = "/tmp/excelSample.xlsx";

try {
    $data = getExcelContents($filepath);
    var_dump($data);
}catch (Exception $e) {
    var_dump($e->getMessage());
}

/**
 * @throws \PhpOffice\PhpSpreadsheet\Exception
 * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
 */
function getExcelContents($filepath)
{
    $inputFileType = IOFactory::identify($filepath);
    $reader = IOFactory::createReader($inputFileType);
    $spreadSheet = $reader->load($filepath);

    //获取第几张数据表,默认从0开始
    $sheet = $spreadSheet->getSheet(0);

    //获取最大行数
    $rows = $sheet->getHighestRow();
    //获取最大列数
    $cols = $sheet->getHighestColumn();

    //获取全量数据集
    $dataArr = $sheet->rangeToArray('A1:' . $cols . $rows);

    return $dataArr;
}

3.写入文件

读取的时候,我们能发现读取出来的数据都是数组的形式,那写入excel文件的时候,使用的数据也是数组的形式。

<?php
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

require "vendor/autoload.php";

$filepath = "/tmp/exportExcel.xlsx";

try {
    $data = [
        [
            'id',
            'name',
            'age'
        ],
        [
            1001,
            'tomson',
            10
        ],
        [
            1009,
            'lucifer',
            20
        ]
    ];

    $spreadSheet = new Spreadsheet();
    $sheet = $spreadSheet->getActiveSheet();

    $i = 1;
    foreach ($data as $excel) {
        $j = 1;
        if (is_array($excel)) {
            foreach ($excel as $e) {
                //强制内容为文本,避免出现科学计数法处理数字的问题
                $sheet->setCellValueExplicitByColumnAndRow($j, $i, $e, DataType::TYPE_STRING);
                $j++;
            }
        }
        $i++;
    }

    $writer = IOFactory::createWriter($spreadSheet, 'Xlsx');

    $writer->save($filepath);

}catch (Exception $e) {
    var_dump($e->getMessage());
}

看一下写入的excel文件
在这里插入图片描述

4.直接返回excel文件

在某些场景下的请求,可能希望直接返回excel文件,这其实也是一种写入,只是写入的目标文件不同。
大部分代码与第3部分类似,只有最后写入的部分略有变化。

	$writer = IOFactory::createWriter($spreadSheet, 'Xlsx');

    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment;filename=downloadExcel.xlsx");
    header("Cache-Control: max-age=0");
    $writer->save('php://output');

发现区别了吗?
增加了一些header,然后把输出目标调整了。

写入也应该做个通用方法的,这里就不写了,留给读此文的朋友自己练手吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php读写excel文件 的相关文章

随机推荐

  • 51单片机实验1-流水灯的设计(流水灯,蜂鸣器,爆闪灯)

    关于软件的使用我们用的是proteus和keil软件 关于软件的安装和使用 这里就不在说明了 如果软件还没有安装可以参考 proteus安装 Proteus软件的安装与使用方法 超详细 http t csdn cn ZaUjM keil安装
  • 电阻上下拉是最常见的用法,那你是不是真的吃透了它?给小白讲讲上拉电阻和下拉电阻!----------------源自玩转单片机与嵌入式

    上拉和下拉电阻主要用于正确偏置数字电路门电路的输入 以防止它们在没有输入条件时的状态是随机浮动的 数字逻辑门可用于连接外部电路或设备 但必须注意确保其输入或输出正常工作并提供预期的开关条件 一 为什么要用上下拉电阻 现代数字逻辑门 IC 和
  • 应届日记之TreeUtiles工具类的使用

    今天遇到一个问题 需要将数据库里面的省市查出来 返回给前端树形结构 用到了TreeUtiles工具类 将list组装成一棵树返回 param list param primaryfieldName param parentFieldName
  • C++ New对象和直接声明对象的区别

    1 new出来的对象需要使用指针接收 而直接声明的不用 例如 A a new A 与A a 2 new出来的对象是直接使用堆空间 而局部声明一个对象是放在栈中 3 new出来的对象类似于申请空间 因此需要delete销毁 而直接声明的对象则
  • 动态路由权限,按钮的权限,菜单权限分别是怎么实现的

    首先什么是前端权限控制 就是当用户登录之后 根据不用用户拥有的权限动态添加 addRoutes 用户能访问的路由页面和能看到的菜单页面 v for 动态路由权限 1 本质就是利用addRoutes这个api来实现动态添加路由权限 然后还可以
  • robotstudio喷涂组件paintapplicator没有显色效果

    因为part这里只能选择仿真之前已经存在的部件 若是像仿真后用source组件生成的新物体 就选择不了 即使你使用传感器 让传感器将检测到的物体传给part 也一样没有喷涂的颜色效果 如果一定要实现 可以参照这个视频 https www b
  • 我的机器学习--线性回归

    1 最小二乘法 上述方法可以直接得到线性回归方程 import numpy as np import matplotlib pyplot as plt x 2 np random rand 100 1 y 4 3 x np random r
  • C语言指针转换为intptr_t类型

    随笔 155 文章 2 评论 342 C语言指针转换为intptr t类型 1 前言 今天在看代码时 发现将之一个指针赋值给一个intptr t类型的变量 由于之前没有见过intptr t这样数据类型 凭感觉认为intptr t是int类型
  • 一个五位数判断他是否为回文数。

    一个五位数判断他是否是回文数 代码 num int input munber n flag True while True if 10000 lt num lt 100000 print input number num break els
  • 腾讯三面被问到有没有参加过CTF?我反手就是一套军体拳打得面试官哑口无言!

    目录 前言 正文 什么是CTF 什么是PWN 为什么要学CTF CTF竞赛模式 CTF各大题型简介 学之前的思考 分析赛题情况 常规做法 CTF比赛需要的知识储备 CTF比赛的神器 恶补基础知识 信息安全专业知识推荐图书 前言 这是一场紧张
  • Typora字体颜色修改

    Typora字体颜色修改 typora中不能直接修改字体颜色 但有三种方法可以实现修改Typora中颜色 第一种 安装AutoHotKey 较简单 安装AutoHotKey windows系统快捷键设置软件 从而通过设置快捷键来达到修改字体
  • macbook brew install 经常遇见 No such file or directory @ rb_sysopen

    安装php brew install php 在执行过程中经常报错 比如以下 gt Installing php dependency openldap gt Pouring openldap 2 5 8 arm64 monterey bo
  • Docker介绍

    目录 docker定义 docker解决了什么问题 docker技术边界 docker给我们带来了哪些改变 docker和虚拟机的区别 docker基本架构 基本架构图 RootFs Linux Namespace 进程命名空间 查看元祖进
  • 动态规划快速入门

    更多内容 欢迎关注微信公众号 全菜工程师小辉 公众号回复关键词 领取免费学习资料 动态规划算法一直是面试手撕算法中比较有挑战的一种类型 很多的分配问题或者调度问题实际上都可能用动态规划进行解决 当然 如果问题的规模较大 有时候会抽象模型使用
  • 【CV】第 14 章:用最少的数据点训练

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 情人节-动态爱心背景(html5+css+js)

    一 效果图 二 源代码
  • GDAL对TIF创建内建金字塔一个问题

    gdalwarp输出tif图像的时候 默认如果没有使用BIGTIFF YES选项 则会根据输出影像的大小进行判断 低于4G则不适用bigtiff格式 对于非bigtiff图像 如果这时候使用gdaladdo创建金字塔 内建模式 如果出现了文
  • SQL——游标

    非原创 东拼西凑来的 游标 cursor 是一个存储在MySQL服务器上的数据库查询 它不是一条SELECT语句 而是被该语句检索出来的结果集 在存储了游标之后 应用程序可以根据需要滚动或浏览其中的数据 游标主要用于交互式应用 其中用户需要
  • 业务安全及实战案例

    业务安全 关于漏洞 注入 业务逻辑 信息泄露 A04 2021 Insecure Design 在线靶场PortSwigger 1 概述 1 1 业务安全现状 1 1 1 业务逻辑漏洞 近年来 随着信息化技术的迅速发展和全球一体化进程的不断
  • php读写excel文件

    1 引入包 有不少提供读写excel文件的包 这里选择比较常用的一个 加到自己的项目里就好了 phpoffice phpspreadsheet 1 8 2 2 读取文件