PHPExcel分配了相当多的内存

虽然PHPExcel是一个漂亮的库,但使用它可能需要为PHP分配大量内存.

根据this thread,只有5个单元可以渲染6 MB的内存使用量:

require_once 'PHP/PHPExcelSVN/PHPExcel/IOFactory.PHP';

$objPHPExcel = PHPExcel_IOFactory::load("PHP/tinytest.xlsx");

$objPHPExcel->setActiveSheetIndex(0);

$objPHPExcel->getActiveSheet()->setCellValue('D2',50);

echo $objPHPExcel->getActiveSheet()->getCell('D8')->getCalculatedValue() . "

";

echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB\r\n";

?>

I get 6MB of memory usage.

虽然PHPExcel提供了减少内存占用的方法,但在我的情况下,所有减少都变得太小了. This page on github提供了PHPExcel缓存管理选项的详细信息.例如,此设置序列化和GZIPs工作表的单元格结构:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

Fatal error: Allowed memory size of xxx bytes exhausted (tried to

allocate yyy bytes) in zzz on line aaa

PHPExcel holds an “in memory” representation of a spreadsheet,so it

is susceptible to PHP’s memory limitations. The memory made available

to PHP can be increased by editing the value of the memorylimit

directive in your PHP.ini file,or by using iniset(‘memory_limit’,

‘128M’) within your code (ISP permitting);

Some Readers and Writers are faster than others,and they also use

differing amounts of memory. You can find some indication of the

relative performance and memory usage for the different Readers and

Writers,over the different versions of PHPExcel,here

07004

If you’ve already increased memory to a maximum,or can’t change your

memory limit,then this discussion on the board describes some of the

methods that can be applied to reduce the memory usage of your scripts

using PHPExcel

07005

PHP Excel的测量结果

我检测了PHPExcel示例文件[01simple.PHP] [5]并做了一些快速测试.

消耗92 KByte:

for( $n=0; $n<200; $n++ ) {

$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $n,'Miscellaneous glyphs');

}

消耗4164 KB:

for( $n=0; $n<200; $n++ ) {

$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $n,'Miscellaneous glyphs');

$objPHPExcel->getActiveSheet()->getStyle('A' . $n)->getAlignment()->setWrapText(true);

}

如果多次执行此片段不变,则每个片段消耗大约4 MB.

检查您的应用在逻辑上是正确的

为确保您的应用程序在逻辑上正确,我建议首先增加PHP内存:

ini_set('memory_limit','32M');

在我的情况下,我必须导出到在线评估应用程序的导出结果数据.虽然水平方向的单元格少于100个,但我需要导出多达10,000个行.虽然单元格的数量很大,但我的每个单元格都包含3个字符的数字或字符串 – 没有公式,没有样式.

如果存在强大的内存限制或大型电子表格

在我的例子中,没有一个缓存选项减少了所需的数量.此外,应用程序的运行时间也大大增加.

最后我不得不切换到老式的CSV数据文件导出.

php excel 单元格类型,设置20个单元格类型后,PhpExcel停止工作相关推荐

  1. 在Excel表格中如何设置字体随单元格大小变化

    在Excel表格中如何设置字体随单元格大小变化 目录 在Excel表格中如何设置字体随单元格大小变化 1.选中单元格,鼠标右键点击"设置单元格式" ​2.在"对齐&quo ...

  2. clickhouse建表,字段类型设置为可为null类型

    clickhouse建表,字段类型设置为可为null类型 基于对clickhouse中的表进行插入或者更新操作时,对于null值插入或者更新出现的问题进行处理,所以在建表的时候对字段进行表明,设置为可 ...

  3. mysql数据库表类型设置_mysql数据库表的类型介绍

    目录 前言 之前我们讲了下载安装数据库,还有如何卸载(虽然直接重装系统就好) 那么现在让我们来讲讲 """ 1.数据库与表的剩余操作 编码配置.引擎介绍 2.数据库字段的 ...

  4. html顶格怎么设置,Word标题顶格怎么设置

    回答: 新建一个Word文档,并输入一些内容. 2 点击工具条上的开始,找到有正文.标题1.标题2的那一栏. 3 右键标题1,在弹出的菜单中选择修改样式,进入修改样式对话框. 4 在修改样式对话框中点 ...

  5. python-docx 设置标题heading的中文字体类型+设置正文的中文字体类型

    依赖包: from docx import Document from docx.shared import Pt from docx.shared import Inches from docx.o ...

  6. C#中导出Excel的单元格属性设置

    A.单元格格式设置,默认为常规类型:Excel Excel.Range r =mySheet.get_Range(mySheet.Cells[1,1],mySheet.Cells[DT.Rows.Co ...

  7. java excel条件格式_Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)...

    概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...

  8. 如何通过VB合并Excel单元格以及设置Excel行高?VB创建Excel表格,合并单元格,生成图形等操作

    如何通过VB合并Excel单元格以及设置Excel行高? 例如:我想把第一列的第4,5,6,7行合并...我在怎样让合并单元格里的字居中,怎样改变字体. 请不吝赐教... ============== ...

  9. PHPExcel导出Excel基本操作,实现设置字体、合并单元格、加粗等功能

    PHPExcel一些相关操作,只罗列了部分功能,后续有新增再补充.代码可直接复制使用,需要注意是引入PHPExcel类库时因为是thinkphp框架,所以使用了import导入,如果其他框架,需要做部 ...

最新文章

  1. Druid数据库连接池超时问题com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10
  2. python正则表达式需要模块_使用Python正则表达式模块,让操作更加简单
  3. java集合转字符串拼接_关于集合和字符串的互转实现方法
  4. 【Flutter】Flutter 布局组件 ( 布局组件简介 | Row 组件 | Column 组件 | SizedBox 组件 | ClipOval 组件 )
  5. 公开征集 | 每个人都可以成为 COSCon'21 主论坛的开源明星
  6. WPF实现特殊统计图
  7. c语言实现61850协议,C语言实现61850库实现代码
  8. vue引入iconfont阿里矢量图库
  9. 集群通信组件tribes之集群的平行通信
  10. matlab设计用户界面,MATLAB程序设计教程(11)—MATLAB图形用户界面设计
  11. win10解决安装.NET Framework 3.5安装不上,错误代码:0x800F081F,解决办法:超级管用。
  12. 以太坊ETH(windows)配置
  13. GB:香港城市大学孙燕妮组发表高准确度病毒株识别工具VirStrain
  14. [JLOI2008]将军
  15. ●「.|貓」erPhotoshop滤镜巧制超级美女插画效果
  16. Scratch软件编程等级考试三级——20200913
  17. 计算CP、CR、CF1、OP、OR、OF1和mAP的top-3评价指标
  18. 大型生鲜配送企业如何做到快速分拣商品?
  19. 批量移动/删除安全组/邮件组
  20. iOS之常用正则(一)

热门文章

  1. java引用其他类的数据头文件_Java 实现数据表与简单Java类映射转换
  2. mysql倍增表的内容,mysql - DATEDIFF不会在触发器内倍增 - SO中文参考 - www.soinside.com...
  3. Dos批处理常用命令大全扫盲篇
  4. C/Cpp / 设计模式 / 模板模式
  5. Cpp 对象模型探索 / 拷贝构造函数 和 赋值构造函数 的调用时机
  6. C/C++位域结构深入解析
  7. java 计算 日期_java 计算某日期 多少天后的日期
  8. 河南工业大学计算机网络技术,河南工业大学2019年硕士研究生入学信息科学与工程学院计算机网络自命题考试大纲...
  9. ddr2是几代内存_内存系列一:快速读懂内存条标签
  10. java跳转_java 跳转语句