phpexcel导入导出

news2024/11/24 11:01:03

前言:
如果你到处的excel软件打开有问题,下面有介绍解决办法
在这里插入图片描述

导入

1. composer init 初始化

2. 下载phpspreadsheet

这里需要注意php版本,需要大于7.2

composer require phpoffice/phpspreadsheet

3. 编写代码

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;
//$filePath = './test.xls'; //测试文件xls
$filePath = './test2.xlsx'; //测试文件 xlsx
try{
    $spreadsheet = IOFactory::load($filePath);
} catch (Exception $e) {
    die('Error loading file "' . pathinfo($filePath, PATHINFO_BASENAME) . '": ' . $e->getMessage());
}


$sheet = $spreadsheet->getActiveSheet();

// 读取第一行作为表头
$headers = [];
$rowIterator = $sheet->getRowIterator(1, 1);
foreach ($rowIterator as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    foreach ($cellIterator as $cell) {
        $headers[] = $cell->getValue();
    }
}

// 初始化一个空数组来存储数据
$data = [];
$rowIterator = $sheet->getRowIterator(2);
foreach ($rowIterator as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    $rowData = [];
    $columnIndex = 0;
    foreach ($cellIterator as $cell) {
        if (isset($headers[$columnIndex])) {
            $rowData[$headers[$columnIndex]] = $cell->getValue();
        }
        $columnIndex++;
    }
    $data[] = $rowData;
}

echo json_encode($data);

4. 查看结果

在这里插入图片描述

导出

导出代码(保存到服务器根目录)

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;

// 假设的 $data 数组,这里只展示了两条数据作为示例
$data = [
    ['id' => 1, '姓名' => '张三', '年龄' => 30],
    ['id' => 2, '姓名' => '李四', '年龄' => 25],
    ['id' => 3, '姓名' => '王五', '年龄' => 30],
    ['id' => 4, '姓名' => '赵柳', '年龄' => 31],
    ['id' => 5, '姓名' => '无极', '年龄' => 40],
    ['id' => 6, '姓名' => '哇塞', '年龄' => 55],
    ['id' => 7, '姓名' => '电动', '年龄' => 18],
    // ... 添加更多数据直到 100 条
];

// 创建一个 Spreadsheet 对象
$spreadsheet = new Spreadsheet();

// 获取当前活动的 sheet
$sheet = $spreadsheet->getActiveSheet();

// 设置表头
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', '姓名');
$sheet->setCellValue('C1', '年龄');

// 为表头设置蓝色背景
$styleArray = [
    'fill' => [
        'fillType' => Fill::FILL_SOLID,
        'color' => [
            'rgb' => '0070C0',
        ],
    ],
];
$sheet->getStyle('1:1')->applyFromArray($styleArray);

// 插入数据
$row = 2; // 从第二行开始插入数据
foreach ($data as $item) {
    $sheet->setCellValue('A' . $row, $item['id']);
    $sheet->setCellValue('B' . $row, $item['姓名']);
    $sheet->setCellValue('C' . $row, $item['年龄']);
    $row++;
}

// 创建一个写入器来保存 Excel 文件
$writer = new Xlsx($spreadsheet);

// 保存 Excel 文件
$fileName = 'example_with_data.xlsx';
$writer->save($fileName);

echo "Excel 文件已生成: " . $fileName;

结果

在这里插入图片描述

导出浏览器直接打开

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Color;

// 假设的 $data 数组,这里只展示了两条数据作为示例
$data = [
    ['id' => 1, '姓名' => '张三', '年龄' => 30],
    ['id' => 2, '姓名' => '李四', '年龄' => 25],
    ['id' => 3, '姓名' => '王五', '年龄' => 30],
    ['id' => 4, '姓名' => '赵柳', '年龄' => 31],
    ['id' => 5, '姓名' => '无极', '年龄' => 40],
    ['id' => 6, '姓名' => '哇塞', '年龄' => 55],
    ['id' => 7, '姓名' => '电动', '年龄' => 18],
    // ... 添加更多数据直到 100 条
];

// 创建一个 Spreadsheet 对象
$spreadsheet = new Spreadsheet();

// 获取当前活动的 sheet
$sheet = $spreadsheet->getActiveSheet();

// 设置表头
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', '姓名');
$sheet->setCellValue('C1', '年龄');

// 为表头设置蓝色背景
$styleArray = [
    'fill' => [
        'fillType' => Fill::FILL_SOLID,
        'color' => [
            'rgb' => '0070C0',
        ],
    ],
];
$sheet->getStyle('1:1')->applyFromArray($styleArray);

// 插入数据
$row = 2; // 从第二行开始插入数据
foreach ($data as $item) {
    $sheet->setCellValue('A' . $row, $item['id']);
    $sheet->setCellValue('B' . $row, $item['姓名']);
    $sheet->setCellValue('C' . $row, $item['年龄']);
    $row++;
}

// 创建一个写入器来保存 Excel 文件
$writer = new Xlsx($spreadsheet);

// 保存 Excel 文件
$fileName = date("Y-m-d").'_data.xlsx';
/* $writer->save($fileName);*/

// 禁止浏览器缓存
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);

// 设置内容类型
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

// 设置下载文件的名称
header('Content-Disposition: attachment; filename="'.$fileName.'"');

// 发送文件内容到浏览器
// 注意:这里我们并没有使用 $writer->save() 方法来保存文件到磁盘
// 而是将文件内容直接输出到浏览器
$writer->save('php://output');
exit();

问题

直接下载excel文件
如果用excel打开出现 “发现不可读的内容。。。。”提示,很大可能是在
在这里插入图片描述
需要加上exit();结束, 意思是后面不能再有其他的输入了

$writer->save('php://output');
exit();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1893416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

amis中条件组合器condition-builder的使用 和 解析

1.amis中配置一个条件组合器&#xff0c;condition-builder。并根据自己业务需求配置source。这里用了一些自定义filter来进行预处理。 {"type": "condition-builder","label": "条件组合","name": "node.conditions&q…

【软件测试】Postman接口测试基本操作

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 Postman-获取验证码 需求&#xff1a;使用Postman访问验证码接口&#xff0c;并查看响应结果…

Python基于PyQt5和卷积神经网络分类模型(CNN分类算法)实现时装类别识别系统GUI界面项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着深度学习技术的发展&#xff0c;计算机视觉领域取得了显著的进步&#xff0c;特别是在图像分类、目…

QT截屏,截取控件为图片,指定范围截屏三种截屏方式

项目中我们常用到截取屏幕&#xff0c;Qt给我的们多种方式&#xff1a; 主要有以下三种&#xff1a; 截取全屏&#xff1b;截取控件为图片&#xff1b;指定位置截屏三种截屏方式&#xff1b; 1.截取全屏 常用&#xff1a; 实现&#xff1a; QScreen *screen QGuiApplicat…

使用selenium定位input标签下的下拉框

先来看一下页面效果&#xff1a;是一个可输入的下拉列表 再来看一下下拉框的实现方式&#xff1a; 是用<ul>和<li>方式来实现的下拉框&#xff0c;不是select类型的&#xff0c;所以不能用传统的select定位方法。 在着手定位元素前一定一定要先弄清楚下拉列表…

汽车信息安全--数据安全:图像脱敏

General 随着车联网的发展&#xff0c;汽车越来越智能化&#xff0c;就像是一部“装着四个轮子的手机”。 有人说&#xff0c;智能手机就如同一部窃听器&#xff0c;无论你开机或者关机&#xff0c;它都会无时不刻地监听着用户的一举一动。 可想而知&#xff0c;智能车辆上…

热网无线监测系统 SystemManager.asmx SQL注入漏洞复现

0x01 产品简介 热网无线监测系统是一种先进的热力管网监测解决方案,它通过无线通信技术实现对热力管网各项参数的实时监测和数据分析,以提高供热效率、降低能耗、保障管网安全。系统利用先进的传感器技术和无线通信技术,对热力管网中的温度、压力、流量等关键参数进行实时监…

内容评分越高,谷歌排名就越靠前吗?

我研究并分析了目前流行的四个内容优化工具的内容评分和Google排名之间的关联性&#xff1a;Clearscope、 Surfer、 MarketMuse 和 Frase&#xff0c;结果显示关联性普遍不高。 虽然相关性并不一定意味着绝对的因果关系&#xff0c;但也表明&#xff0c;一味的追求内容得分并不…

【数据结构】04.单链表

一、链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 节点的组成主要有两个部分&#xff1a;当前节点要保存的数据和保存下⼀个节点的地址&#xff08;指针变量&#…

Postman使用教程

传统接口风格 RESTful风格 使用Postman完成测试用例目标&#xff1a; Postman教程 &#xff08;1&#xff09;准备工作&#xff0c;下载Postman新建 &#xff08;2&#xff09;登录接口调试-获取验证码 &#xff08;3&#xff09;登录接口调试-登录 &#xff08;4&#xff09;…

Android - Json/Gson

Json数据解析 json对象&#xff1a;花括号开头和结尾&#xff0c;中间是键值对形式————”属性”:属性值”” json数组&#xff1a;中括号里放置 json 数组&#xff0c;里面是多个json对象或者数字等 JSONObject 利用 JSONObject 解析 1.创建 JSONObject 对象&#xff0c;传…

工厂方法模式:概念与应用

目录 工厂方法模式工厂方法模式结构工厂方法适合的应用场景工厂方法模式的优缺点练手题目题目描述输入描述输出描述**提示信息**解题&#xff1a; 工厂方法模式 工厂方法模式是一种创建型设计模式&#xff0c; 其在父类中提供一个创建对象的方法&#xff0c; 允许子类决定实例…

无法启动此程序,因为计算机中丢失 api-ms-win-crt-string-11-1-0.dl。尝试重新安装该程序以解决此问题。

在windows server2012系统中利用WinSW部署jar包时&#xff0c;报错&#xff1a;无法启动此程序&#xff0c;因为计算机中丢失 api-ms-win-crt-string-11-1-0.dl。尝试重新安装该程序以解决此问题。 原因&#xff1a; 缺少Microsoft Visual C 2015运行库或者已安装低版本运行库…

提升TK直播体验:使用美国直播网络的六大优势

国内有许多公司想在TikTok上进行美国直播&#xff0c;但由于TikTok的政策限制&#xff0c;在国内直接访问存在困难。然而&#xff0c;通过使用Ogcloud的美国直播网络&#xff0c;这一问题得以解决。那么&#xff0c;TikTok海外直播使用美国直播网络具体有哪些优势呢&#xff1f…

【Koa】KOA 基础-掌握基于koa2搭建web应用的基础

目录 KOA 基础框架介绍与环境搭建koa2 基本介绍Node.JS 环境安装创建 Hello World 程序 Web 应用开发基础处理get请求参数处理post请求参数响应一个页面处理静态资源 中间件基本概念和执行过程中间件概念理解Koa 中间件执行模型-洋葱圈模型Koa洋葱圈设计理解 用 koa-body 处理 …

【掌握C++ string 类】——【高效字符串操作】的【现代编程艺术】

专栏&#xff1a;C学习笔记 上一篇&#xff1a;【C】——【 STL简介】——【详细讲解】 1. 为什么要学习 string 类&#xff1f; 1.1 C 语言中的字符串 在 C 语言中&#xff0c;字符串是以 \0 结尾的字符集合。如下所示&#xff1a; #include <stdio.h>int main() {c…

【第五节】C/C++数据结构之图

目录 一、图的基本概念 1.1 图的定义 1.2 图的其他术语概念 二、图的存储结构 2.1 邻接矩阵 2.2 邻接表 三、图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四、最小生成树 4.1 最小生成树获取策略 4.2 Kruskal算法 4.3 Prim算法 五、最短路径问题 5.1 Dijkstra算…

springboot+vue人事管理系统 +LW +PPT+源码+讲解

3系统分析 3.1可行性分析 在开发系统之前要进行系统可行性分析&#xff0c;目的是在用最简单的方法去解决最大的问题&#xff0c;程序一旦开发出来满足了员工的需要&#xff0c;所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 3.1.1技…

米国政府呼吁抛弃 C 和 C++

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 很多观点认为C 或 C永远不可被…

C++那些事之小项目实战-进程间通信

小项目实战之进程间通信 进程间通信是一个非常重要的话题&#xff0c;特别是像一些大型项目都有它的影子&#xff0c;例如&#xff1a;PostgreSQL使用了管道完成copy的进程间通信&#xff0c;那么本节也将基于这个主题&#xff0c;使用C去搭建一个进程间通过管道通信的demo出来…