php Spreadsheet Csv,使用 PhpSpreadsheet 实现读取写入 Execl
使用 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相关推荐
- php Spreadsheet Csv,基于 PhpSpreadsheet 简单 Excel 导入导出
GitHub 安装 composer require jianyan74/php-excel 引入 use jianyan\excel\Excel; Demo 目前只支持文字.函数.选择.日期转换 / ...
- php csv文件的读取,写入,输出下载操作详解
2019独角兽企业重金招聘Python工程师标准>>> php对csv文件的读取,写入,输出下载操作. 代码: <?php $file = fopen('text.csv',' ...
- Python文件操作-文本文件、二进制文件、csv文件的读取写入、OS、shutil、CSV模块、常用字符编码
Python文件操作 文本文件和二进制文件 文件操作相关模块 open()创建文件对象 文件对象的常用属性和方法 pickle 序列化 文本文件读取和写入 文本文件写入步骤 write()/write ...
- Day020 - pdf合并与excel/csv读取写入
PDF文件操作 导入三方库 import PyPDF2 读取操作 以读的方式打开pdf文件获取pdf文件对象 pdf1 = PyPDF2.PdfFileReader('被打开的pdf文件路径') 获取 ...
- spreadsheet php,关于 PhpSpreadsheet 简单教程
今天遇到一个问题,涉及 php 与 excel 之间数据转换.之前一直用 PHPExcel,他们的开发组不更新了.但是找到了 PhpSpreadsheet. 一.介绍 用纯 php 编写的库,它提供了 ...
- PhpSpreadsheet如何读取excel文件
PhpSpreadsheet如何读取excel文件 一.总结 一句话总结:万能的百度,直接搜代码就好,绝对有,毕竟github上面4000+的关注,说明很多人用了这个,使用照着demo倒是异常简单 二 ...
- pandas 读取写入保存文件
文章目录 csv 读取 写入 excel 读取数据 写入数据 csv import pandas as pd 读取 df1 = pd.read_csv(r'shares\中原证券(601375)\lr ...
- java压缩文件读取_用Java读取/写入压缩和非压缩文件
java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...
- 用Java读取/写入压缩和非压缩文件
这篇文章的主要原因是尝试不重复自己( DRY ),因为通常,我会遇到读写压缩和非压缩文件(主要是JSON和CSV)的递归需求. 首先让我们看看如何读取文本文件. 注意我正在使用(相对较小的)文本文件, ...
最新文章
- 51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈
- wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
- 爬虫3 requests基础之 乱码编码问题
- gcc之UTF-8编码
- hello March
- jQuery File Upload blueimp with struts2 简单试用
- POJ 2253 1797
- ubuntu 创建Fdfs文件服务器
- mac touchbar 自定义
- 存在感应雷达模块,LED灯感应控制,微波雷达技术应用
- 51单片机4位数码管按键显示
- 福布斯中国奢侈品市场调查
- 基于STM32+UCOS的智能车载终端系统总结
- 离职原因要如何写才能不引发纠纷
- 【前端面试必读】实现图片16:9
- 狂奔与内卷并存,自嗨锅、莫小仙们如何寻找“破局之道”?
- CSDN资源获取下载积分规则
- 共探万物智联新模式,第二届中国通信业物联网大会成功召开
- h2database源码解析-如何插入一条行记录
- 数学建模优化模型简单例题_离散型优化问题Ⅱ_数学建模_每日一题(未附代码)附求解规划类问题的建议...
热门文章
- 无法安装 cloudera-manager-agent
- 软件项目管理 3.2.预测生存期模型
- .NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇
- Spring Data JPA 之 @Entity 的常用注解
- macbook无法打开移动硬盘 为什么mac上显示不了移动硬盘
- Vmware虚拟机Linux配置固定IP地址(详细版)
- chrome浏览器 各个版本下载地址
- 有了天猫精灵智能套组,享受管家级别智能服务
- python 百度云搜索引擎入口_2016最新百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...
- 漫画:什么是MapReduce?