使用 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运算的计算引擎来为我们处理运算公式,并获取计算之后的值.

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

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

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

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

编辑修改execl

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

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

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

php Spreadsheet Csv,使用 PhpSpreadsheet 实现读取写入 Execl相关推荐

  1. php Spreadsheet Csv,基于 PhpSpreadsheet 简单 Excel 导入导出

    GitHub 安装 composer require jianyan74/php-excel 引入 use jianyan\excel\Excel; Demo 目前只支持文字.函数.选择.日期转换 / ...

  2. php csv文件的读取,写入,输出下载操作详解

    2019独角兽企业重金招聘Python工程师标准>>> php对csv文件的读取,写入,输出下载操作. 代码: <?php $file = fopen('text.csv',' ...

  3. Python文件操作-文本文件、二进制文件、csv文件的读取写入、OS、shutil、CSV模块、常用字符编码

    Python文件操作 文本文件和二进制文件 文件操作相关模块 open()创建文件对象 文件对象的常用属性和方法 pickle 序列化 文本文件读取和写入 文本文件写入步骤 write()/write ...

  4. Day020 - pdf合并与excel/csv读取写入

    PDF文件操作 导入三方库 import PyPDF2 读取操作 以读的方式打开pdf文件获取pdf文件对象 pdf1 = PyPDF2.PdfFileReader('被打开的pdf文件路径') 获取 ...

  5. spreadsheet php,关于 PhpSpreadsheet 简单教程

    今天遇到一个问题,涉及 php 与 excel 之间数据转换.之前一直用 PHPExcel,他们的开发组不更新了.但是找到了 PhpSpreadsheet. 一.介绍 用纯 php 编写的库,它提供了 ...

  6. PhpSpreadsheet如何读取excel文件

    PhpSpreadsheet如何读取excel文件 一.总结 一句话总结:万能的百度,直接搜代码就好,绝对有,毕竟github上面4000+的关注,说明很多人用了这个,使用照着demo倒是异常简单 二 ...

  7. pandas 读取写入保存文件

    文章目录 csv 读取 写入 excel 读取数据 写入数据 csv import pandas as pd 读取 df1 = pd.read_csv(r'shares\中原证券(601375)\lr ...

  8. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  9. 用Java读取/写入压缩和非压缩文件

    这篇文章的主要原因是尝试不重复自己( DRY ),因为通常,我会遇到读写压缩和非压缩文件(主要是JSON和CSV)的递归需求. 首先让我们看看如何读取文本文件. 注意我正在使用(相对较小的)文本文件, ...

最新文章

  1. 51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈
  2. wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
  3. 爬虫3 requests基础之 乱码编码问题
  4. gcc之UTF-8编码
  5. hello March
  6. jQuery File Upload blueimp with struts2 简单试用
  7. POJ 2253 1797
  8. ubuntu 创建Fdfs文件服务器
  9. mac touchbar 自定义
  10. 存在感应雷达模块,LED灯感应控制,微波雷达技术应用
  11. 51单片机4位数码管按键显示
  12. 福布斯中国奢侈品市场调查
  13. 基于STM32+UCOS的智能车载终端系统总结
  14. 离职原因要如何写才能不引发纠纷
  15. 【前端面试必读】实现图片16:9
  16. 狂奔与内卷并存,自嗨锅、莫小仙们如何寻找“破局之道”?
  17. CSDN资源获取下载积分规则
  18. 共探万物智联新模式,第二届中国通信业物联网大会成功召开
  19. h2database源码解析-如何插入一条行记录
  20. 数学建模优化模型简单例题_离散型优化问题Ⅱ_数学建模_每日一题(未附代码)附求解规划类问题的建议...

热门文章

  1. 无法安装 cloudera-manager-agent
  2. 软件项目管理 3.2.预测生存期模型
  3. .NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇
  4. Spring Data JPA 之 @Entity 的常用注解
  5. macbook无法打开移动硬盘 为什么mac上显示不了移动硬盘
  6. Vmware虚拟机Linux配置固定IP地址(详细版)
  7. chrome浏览器 各个版本下载地址
  8. 有了天猫精灵智能套组,享受管家级别智能服务
  9. python 百度云搜索引擎入口_2016最新百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...
  10. 漫画:什么是MapReduce?