Excel文件格式

BIFF

BIFF(Binary Interchange File Format)从Excel97 - Excel2003使用的是BIFF version 8,可是说BIFF8是目前最广泛使用的Excel版本。BIFF8基于微软的复合文档格式。

OOXML

以上是Microsoft官方的介绍,个人感觉说的比较虚。Word,PPT等Office组件的文件格式还没有研究过,仅针对Excel2007的文件格式来说,简单说来它就是一组XML文档的集合,进行ZIP压缩后的结果再重新命名为xlsx。

如果想深入研究Excel2007文件格式的话,比较简单的做法是将文档的后缀名(xlsx)改为zip,然后解压后就能看到真实的XML的文件组织结构。针对Excel2007的文件格式来说还是比较简单的,而且文件的组织及内容都比较容易理解。

处理方法

PHP处理Excel的方法将BIFF、OOXML转换成csv后再处理

严格的说这不是一个处理Excel文档的方法。将BIFF、OOXML文档转换成CSV的文本格式,然后再用PHP解析这个文件,跨平台,效率比较高、可以用来读取Excel,也可以用于生成Excel。不过只能直接使用CSV的文件,如果经常处理BIFF、OOXML文档的话需要手工转换,不能自动化,可能会造成数据丢失,并且CVS文档中一个文件只有一个SHEET。

Windows下通过COM处理Excel

在Windows环境下可以通过COM组件来解析Excel,可以用来读取Excel也可以用来生成Excel,由于没有Windows的开发环境,所以这种方法没有进行测试,PHP手册上有相关的例子,而且网上也有相关的文章。此种方式的最大问题就是只能应用于Windows平台。

使用第三方提供的类库处理Excel

使用PHP的第三方类库解析Excel文件,跨平台。某些类库支持写操作。支持BIFF、OOXML文件格式。不过,某些类库由于实现者的水平导致不同的类库质量参差不齐甚至可能存在bug、性能不高、内存占用过大等问题。并且很多第三方类库的更新不及时或已停止更新。在PHP处理Excel的第三方类库中,发现的无论功能还是更新维护上做的比较好的只有PHPExcel。

PHP调用第三方程序或服务来处理Excel

可以用C++,Java,Python等语言编写处理Excel的程序或服务,PHP在调用相关的程序或服务来处理Excel,第三方程序或服务将处理好的结果返回给PHP。

这实际上不是一个实际使用PHP处理Excel的方法,但不失为一种解决PHP处理Excel的问题的方法。

生成符合规范的XML来生成伪Excel

在服务器端生成符合规范的XML,再向浏览器输出相应的协议头,可以生成伪Excel,此种方法可以,可以生成简单的效果,但此种方法生成的Excel实际上是XML文档,当再次编辑的时候会出现问题。

PHP处理Excel的第三方库PHPExcel

现在最新的版本是,发布。PHPExcel是一个相当强大的 MS Office Excel 文档生成类库,当需要输出比较复杂格式数据的时候,PHPExcel 是个不错的选择,并且文档做的也比较好,有比较好的函数参考手册。

但PHPExcel在处理Excel2007(OOXML)文档时会有一点问题。由于PHPExcel是先将Excel文件加载进内存,并在内存中构建OOXML的文档结构,所以在处理复杂或不规范的Excel2007文档时会造成进程内容占用过大,而且初始化文档模型的时间开销也很大,甚至不能接受。

以上问题在Excel1.6.5之前的版本还不是特别严重,因为PHPExcel1.6.5之前的版本,PHPExcel只会对列号在“A-ZZ”范围内的单元格进行处理,自PHPExcel1.6.5起去掉了这个限制,故如果Excel2007文档不规范可能会造成在内存中构建文档模型的时候内存开销过大。

在调研过程中,下载了PHPExcel1.6.4-PHPExcel1.7.2版本进行测试,测试时使用的Excel文档的单元格数据验证部分定义的不规范,5个验证条件涉及的单元格都在4000个以上,实际有用的单元格只有几个,在PHPExcel1.6.4之前的版本,会忽略掉ZZ列之后的单元格,由于有此限制除了内存占用多一些,加载时间长一些外一般不会出现严重的问题,但在PHPExcel1.6.5之后的版本直接在加载验证条件部分出现了内存溢出(内存限制设置为128MB,溢出时大概加载了1/2的验证条件)。

因此,如果使用PHPExcel进行解析Excel2007文档时,尽可能的使用规范的文档模板。在不能控制Excel2007文档的情况下,如果Excel2007文档的结构相对比较简单,但是要处理大型复杂的OOXML文档,最好还是根据实际的需求来开发简单的组件来进行解析,或根据实际情况对PHPExcel进行修改或裁剪。

PHPExcelReader

看到这个名字就可以推断出这个第三方类库只能用于读取Excel而不能用于生成Excel,网上关于PHPExcelReader的文章比较多,但是PHPExcelReader的问题也比较多,最后更新时间是(这个库的确比较老了),并且仅支持BIFF格式(Excel97 - Excel2003),解析速度较快。只能处理简单的Excel文档,不支持富文本的处理,并且在处理日期类型时会有bug,个人感觉不是很实用。

PHP处理Excel方法总结

综上所述,各种处理Excel的方法都有各自的优点和缺点,网络上PHP处理Excel的第三方库虽然为数不少,但真正能应用与生产环境的并不多,以上介绍的PHPExcel及PHPExcelReader只是暂时发现的比较好用的第三方库。

在实际的开发中,如果涉及到需要处理Excel的需求是,比较推荐的是以下几种方法:

使用第三方库PHPExcel进行解析

原因:在第三方库中PHPExcel相对来说从功能,质量到维护对算比较好的。

PHP调用第三方程序或服务来处理Excel

原因:相对于PHP来说Java、Python等语言的相关第三方组件可能会更成熟些,而且如果发现所选用的组件出现问题,比较容易进行更换。

自己开发简单的组件来解析Excel

原因:相对来说Excel的文件结构不是很复杂,自己开发简单的组件成本也不会很大。

php处理的excel,PHP处理Excel相关推荐

  1. 「Excel技巧」Excel中根据某列的值去汇总另外一列的值

    「Excel技巧」Excel中根据某列的值去汇总另外一列的值 在Excel表格中输入数据,需要根据component列的值分别汇总July列的值. 1.选中单元格区域并点击"insert&q ...

  2. 「Excel技巧」Excel技巧之如何看文件里的宏?

    「Excel技巧」Excel技巧之如何看文件里的宏? 在excel里打开一个文件,进入View这个菜单里,然后如下图示,找到Macros图标, 点击菜单'View Macros', 进入如下界面,就能 ...

  3. php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...

    PHP如何导出当前页面中的表格至Excel 常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点.个人推荐用第三种方法,因为它可以跨平台使用. 1. 以.csv格式读取 将.xls转换成. ...

  4. .net 导出html 到excel 合并单元格,C#导出Excel,并且设置Excel单元格格式,合并单元格....

    注:要添加COM组件 Microsoft Excel 11.0 Object Library  引用. 具体代码如下: using System; using System.Collections.G ...

  5. VB 6.0中如何访问EXCEL 2007及EXCEL 2010

    问题及分析过程 最近一段时间在使用VB 6.0开发一个OFFICE考试系统,理想的情况是支持WINDOWS XP,WINDOWS 7,WINDOWS 8,Office 2003和Office 2010 ...

  6. Python 技术篇 - 用xlrd库和xlwt库操作excel,对excel进行读取和写入实例演示

    首先你需要安装 xlrd 和 xlwt 这两个库,一个是读库,一个是写库. 先来说一下这两个库的局限性: 局限性一: 不能用于 xlsx 文件 局限性二: 写的时候不能写入已有的文件,只能重新建 解决 ...

  7. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  8. python如何修改excel数据库_python学习笔记-day7-2-【python从mysql数据库导数据到excel,读excel,修改excel】...

    这节说下如何用python把数据库里的数据导出到excel里,并如何读取excel, 修必excel等操作. 一.用python把数据库里的数据导出到excel里 1.导入如下的模块,没有的话需要安装 ...

  9. Excel:解决Excel表格每一行所有字段在一个单元格的情况

    Excel:解决Excel表格每一行所有字段在一个单元格的情况 目录 解决问题 解决办法 解决问题 Excel表格每一行所有字段在一个单元格的情况 解决办法 哈哈,大功告成!

  10. Excel:利用Excel内置功能实现对某列表格按照条件进行升降序排列

    Excel:利用Excel内置功能实现对某列表格按照条件进行升降序排列 目录 实现功能 实现方法 实现功能 利用Excel内置功能实现对某列表格按照设置条件进行升降序排列 实现方法

最新文章

  1. PluckerNet:一种基于3D线匹配的配准网络(CVPR2021)
  2. InputStream、OutputStream、String的相互转换(转)
  3. E: Could not get lock /var/lib/dpkg/lock解决
  4. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)
  5. C语言实现哈密尔顿hamiltonian算法(附完整源码)
  6. Flink 实时计算 - 维表 Join 解读
  7. echarts散点图搭配时间轴
  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践
  9. 欧盟:2020年之前普及免费WiFi网络
  10. “返回顶部”实现一例
  11. 2018尚硅谷大数据视频_韩顺平_Linux视频教程
  12. 基于javaweb的宠物管理系统
  13. 【图像特征提取】基于matlab脉冲耦合神经网络(PCNN)图像特征提取【含Matlab源码 1868期】
  14. 富士施乐Fuji Xerox DocuPrint CP215 w 驱动
  15. Hi3559AV100移植友方4G模块N720V5(一)
  16. 效率至上 计算机使用规范
  17. maven项目中的pom文件依赖关系
  18. 显示器知识:分辨率1080P、2K、4K、8K相关知识介绍,看完你就懂了!
  19. Unity3D 学习笔记6 ——协程
  20. 许久未曾写过文章了,如今,再度出发:一个一般学校的大三学子,立足过去,展望未来,模糊的规划,坚定的方向,不断前进。

热门文章

  1. qt creator 运行 出现 “can not open .... jom for write 解决方案
  2. Linux内核中的软中断、tasklet和工作队列具体解释
  3. MS08067/MS10061漏洞靶机环境搭建总结
  4. 整理了 37 个 Python 网站开发库
  5. python重量计算月球上的物体_Tensorflow.物体检测_资料(raccoon浣熊)
  6. Java Interrupt
  7. 神话还是谎言! 真实的GT-3是这样的!道翰天琼认知智能API接口平台为您揭秘。道翰天琼认知智能API接口平台为您揭秘。
  8. 7.4. ​​ATTCK
  9. Pycharm生成可执行程序exe
  10. 【前端开发】菜鸟必看,html chrome浏览器禁用谷歌翻译