php Spreadsheet Csv,使用 PhpSpreadsheet 实现读取写入 Execl「建议收藏」

php Spreadsheet Csv,使用 PhpSpreadsheet 实现读取写入 Execl「建议收藏」使用PhpSpreadsheet实现读取写入Execl由吴亲库里创建于1年前,最后更新于1年前版本号#19742views1likes0collects前言这两天需要做一个支持读写微软办公软件的功能模块.最底下会说下自己下一步的想法,我先找了PhpSpreadheet这个第三方的扩展包,功能很完善,是一个纯PHP编写的库,看了官方文档,目前支持XLS,XML,XLSX,ODS…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

使用 PhpSpreadsheet 实现读取写入 Execl

由 吴亲库里 创建于1年前, 最后更新于 1年前

版本号 #1

9742 views

1 likes

0 collects

前言

这两天需要做一个支持读写微软办公软件的功能模块.最底下会说下自己下一步的想法,我先找了PhpSpreadheet这个第三方的扩展包,功能很完善,是一个纯PHP编写的库,看了官方文档,目前支持XLS,XML,XLSX,ODS,SLK,Gnumeric,CSV以及HTML.

软件支持

需要满足以下条件:

PHP5.6及以上版本

PHP扩展php_zip已开启

PHP扩展php_xml已开启

启用PHP扩展php_gd2(如果没有编译)

安装

进入自己的项目目录,使用composer安装

composer require phpoffice/phpspreadsheet

编写电子表格最简单的一个方法

require’vendor/autoload.php’;

usePhpOffice\PhpSpreadsheet\Spreadsheet;

usePhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

$sheet = $spreadsheet->getActiveSheet();

$sheet->setCellValue(‘A1’, ‘Hello World !’);$writer = new Xlsx($spreadsheet);

$writer->save(‘hello world.xlsx’);

读取文件

可以使用PhpSpreadsheet的IOFactory识别文件类型并加载它,

$inputFileName = ‘./sampleData/example1.xls’;

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);

此方法会在执行加载之前测试当前文件,为了防止恶意文件,比如说当前文件实际上是CSV文件或者包含HTML标记,但是已经给出了.xls的扩展名,它会拒绝用于.xls的加载器,而使用其他的加载器去检测当前文件.

读取文件实例

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;

use PhpOffice\PhpSpreadsheet\IOFactory;

public function actionGetExcel()

{

$whatTable = 0;

$filename = ‘cc.xlsx’;

/** Identify the type of $inputFileName **/

$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($filename);

/** Create a new Reader of the type that has been identified **/

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); //实例化阅读器对象。

$spreadsheet = $reader->load($filename); //将文件读取到到$spreadsheet对象中

$worksheet = $spreadsheet->getActiveSheet(); //获取当前文件内容

$sheetAllCount = $spreadsheet->getSheetCount(); // 工作表总数

for ($index = 0; $index < $sheetAllCount; $index++) { //工作表标题

$title[] = $spreadsheet->getSheet($index)->getTitle();

}

$sheet = $spreadsheet->getSheet($whatTable); // 读取第一個工作表

$highest_row = $sheet->getHighestRow(); // 取得总行数

$highest_column = $sheet->getHighestColumn(); ///取得列数 字母abc…

//

$highestColumnIndex = Coordinate::columnIndexFromString($highest_column); //转化为数字;

for ($i = 1; $i <= $highestColumnIndex; $i++) {

for ($j = 1; $j <= $highest_row; $j++) {

// $conent = $sheet->getCellByColumnAndRow($i, $j)->getValue();

$conent = $sheet->getCellByColumnAndRow($i, $j)->getCalculatedValue();

$info[$j][$i] = $conent;

}

}

var_dump($info);

}

这里我屏蔽掉了

$conent = $sheet->getCellByColumnAndRow($i, $j)->getValue();

因为我们execl中的表格的值不一定就是手动书写上去的,有些是通过单元格之间的计算得出的结果,这时候直接获取值我们得到的只是一个运算公式的字符串,比如下图中的 ‘=SUM($i,$j)’这时候我们需要使用包中支持execl运算的计算引擎来为我们处理运算公式,并获取计算之后的值.

4cf69c02500104474f300b2d71931804.png

最后变成一个二维数组的数据(行列),然后渲染就实现了简单的读功能了,但是这里还有问题

execl表中之前有些单元格有样式的,暂时没有从那一坨东西中找到.

有些公式之前还写了东西,比如图中的$,或者负数了就-$…….,你计算出来之后只是一个值,这一块也需要处理

表格中的图片,图处理…..

编辑修改execl

别的方案(我暂时没去搭建)

不管你把这个包用的再好,你还是不能完美的实现客户端在没有安装微软office的情况下实现在线查看在线直接编辑的文件.看了一些文档查了点资料可以搭建office web apps的服务来满足这样的需求.

需要两台主机.主机的系统必须是windwos Server.一台主机要安装office Online就可以理解提供office的在线服务,另一台作为域控制器(好专业的名词),就是由这个主机专门去管理office Online主机,可以去微软官网文档具体看下操作,如果有人已经搭建了,希望能分享一下.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193453.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm是下载社区版本的还是专业版本_pycharm免费版和专业版

    pycharm是下载社区版本的还是专业版本_pycharm免费版和专业版好多初用pycharm的朋友,不知道PyCharm专业版和PyCharm社区版的区别,总体而说pycharmpro2019mac是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。…

    2022年8月29日
    4
  • 基于stm32的智能小车(远程控制、避障、循迹)

    基于stm32的智能小车(远程控制、避障、循迹)学完stm32,总是想做点东西“大显身手”一下,智能小车就成了首选项目,其核心只是就是PWM输出,I/O口引脚电平判断。制作智能小车的硬件名单:制作智能小车的硬件列表: (1)STM32C8T6核心板 一块 (2)L298N电机驱动 两个 (3)2.4G无线通讯模块 一个 (4)红外壁障模块 两个 (5)红外循迹模块 两个 (6)电源转换模块 一个 (7)18650供电电池

    2022年10月17日
    3
  • NicEdit和Kindeditor配置

    NicEdit和Kindeditor配置推荐两款富文本编辑器:NicEdit和Kindeditor做过Web开发的朋友相信都使用过富文本编辑器,比较出名的CuteEditor和CKEditor很多人应该已经使用过,在功能强大的同时需要加载的东西也变得很多。下面要推荐的两款富文本编辑器都是使用JS编写,使用简单,非常轻量级。NicEditorNicEdit是一个轻量级,跨平台的InlineContentEditor…

    2022年10月12日
    3
  • 手机qq怎么看撤回的闪照_如何查看qq闪照过后的照片

    手机qq怎么看撤回的闪照_如何查看qq闪照过后的照片QQ只要接收到了图片都是有本地缓存,我们通过浏览本地文件即可找到。1、打开文件管理。找到图片中的目录。 2、按照时间降序排序。按照时间找到QQ好友发送的时间。  3、打开,以图片格式; 这样我们就很简单的看到了QQ好友撤回照片以及闪照。…

    2022年8月10日
    21
  • 9_商品详情页面解决方案

    9_商品详情页面解决方案需求分析当搜索商品时,显示商品的详细信息,同时选择不同的sku,进行不同的数据显示解决方案商家更改数据微服务,通过消息队列MQ监听到发生变化,微服务调用者使用Thymeleaf模板,生成相应的静态页面,储存在本地磁盘,当用户发送请求到微服务时,使用nginx技术进行相应页面的返回商品详情页面静态化1、建Module:supergo_page2、改pom<?xmlversion=”1.0″encoding=”UTF-8″?><projectxmlns=”http

    2022年6月25日
    28
  • 黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?[通俗易懂]

    黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?[通俗易懂]欢迎关注个人微信公众号:小哈学Java,文末分享阿里P8高级架构师吐血总结的《Java核心知识整理&面试.pdf》资源链接!!个人网站:"https://www

    2022年8月2日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号