问题标签 [phpoffice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 节省内存 PhpOffice\PhpSpreadsheet
我想阅读一个大(40 000 行)xlsx 文件。在旧版本(PHPExcel)中,我使用了缓存,并且效果很好。
现在我想迁移到最新的 PhpSpreadsheet 版本,我需要使用缓存。如果没有缓存设置,程序将以内存分配错误结束。(在 php.ini 中memory_limit = 5000M
:)
*致命错误:第 400 行 D:***\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Collection\Cells.php 中的内存不足(已分配 780140544)(试图分配 29360128 字节)*
我尝试了 2 个缓存包,APCu 和 Redis。
在这两种情况下,我都遇到了致命错误。
APCu: *致命错误:未捕获的 PhpOffice\PhpSpreadsheet\Exception:单元格条目 A2 不再存在于缓存中。这可能意味着缓存已被其他人清除。在 D:***\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Collection\Cells.php:433 堆栈跟踪:#0 D:***\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Worksheet\Worksheet.php(1239): PhpOffice\PhpSpreadsheet\Collection\Cells->get('A2') #1 D:***\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Worksheet\RowCellIterator.php(128): PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->getCellByColumnAndRow (1, 2) #2 D:***\Eclipse\WebShopUpdate\run.php(358): PhpOffice\PhpSpreadsheet\Worksheet\RowCellIterator->current() #3 {main} 在 D:***\phpoffice 中抛出\phpspreadsheet\src\PhpSpreadsheet\Collection\Cells.php 在第 433 行*
Redis: *致命错误:未捕获的 RedisException:Redis 服务器在 D:***\cache\redis-adapter\RedisCachePool.php:82 中消失 堆栈跟踪:
0 D:***\cache\redis-adapter\RedisCachePool.php(82): Redis->set('phpspreadsheet....', 'a:4:{i:0;b:1;i:. ..') #1
D:***\cache\adapter-common\AbstractCachePool.php(240): Cache\Adapter\Redis\RedisCachePool->storeItemInCache(Object(Cache\Adapter\Common\CacheItem), NULL) #2 D:*** \cache\simple-cache-bridge\SimpleCacheBridge.php(72): Cache\Adapter\Common\AbstractCachePool->save(Object(Cache\Adapter\Common\CacheItem))
3 D:***\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Collection\Cells.php(372):
Cache\Bridge\SimpleCache\SimpleCacheBridge->set('phpspreadsheet....', Object(PhpOffice\PhpSpreadsheet\Cell\Cell)) #4 D:***\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Collection\Cells。 php(398): PhpOffice\PhpSpr 在 D:***\cache\adapter-common\AbstractCachePool.php 在第 337 行 *
环境:
- PHP 版本 7.1.3
- Apache/2.4.25 (Win32)
- APCu 版本 5.1.11
- Redis 版本 4.0.2
环境2:
- PHP 版本 5.6.30
- Apache/2.4.25 (Win32)
- APCu 版本 4.0.10
- Redis 版本 2.2.7
在所有情况下我都遇到了同样的错误。
php - 无法正确设置 setPrintArea
我正在使用 phpspreadsheet 的 v1.3.1。
我正在构建一个 excel 文件(下载),一切正常。唯一的问题是定义 setPrintArea ......它总是将标准 PrintArea 返回到 excel 中。基本上,我构建了 excels 行并在定义 printArea 之后......我之前也尝试过,但没有成功。
该区域有 58 行,但我无法将该区域设置为“AG”单元格......基本上,我想在一页中打印我所有的 excel,而不是 8。
谢谢 !
php - PHPWord代码无法编辑模板并另存为新文件
我正在制作一个记录公司员工所有数据和文件的页面,它的部分功能是生成身份证,这是我正在努力解决的部分。
我下载了 PHP Word,首先安装了 composer 并使用它在项目的根目录(php 页面所在的位置)安装 PHPWord 库,它安装了以下文件和文件夹:
-composer.lock -composer.json -vendor(这个是包含所有库的文件夹)
“vendor”子文件夹和文件:-autoload.php -composer(文件夹)-pclzip(文件夹)-phpoffice(文件夹)-zendframework(文件夹)
我认为这是安装它所要做的一切,所以我继续添加代码,问题是它不起作用......这是代码,我添加了注释以进一步解释:
所以是的,我意识到问题本身可能是 PHPWord 代码,要么是我的代码有问题,要么是库没有正确安装,我尝试运行 php 模板本身来测试该模板是否有效,但它也不起作用
php - 保存 rtf 文件时的问题(phpword lib)
当我用 phpword lib 保存 RTF 文件时,我遇到了一些问题。
我用 . 打开一个 RTF 文件IOFactory::load
,然后用函数 write 保存它,文件上有一些元数据,我不知道为什么。
这是我的代码:
当我打开已保存的新文件时,它显示:
如果有人知道为什么我的文件中有一些元数据会很好。
phpword - 在 PHPWord 中编码 HTML 实体
我有一个包含(我认为)从 Word 剪切并粘贴到 TinyMCE 的内容的数据库。我现在需要使用 PHPWord(最新版本)将这些记录转回 Word 文档。
数据中充满了 html 十六进制字符代码,例如 “ 和 – 我需要将其转换为破折号、项目符号和引号。该代码作为 UTF-8 完美地服务于浏览器,但我没有尝试将其转换为 Word 文档。
没有任何操作会给我一个我无法打开的文件。
这给了我一个[square]¢
虽然这给了我每个人一个正方形......
我可以得到一个字符串替换来将破折号和引号变成简单的字符,但是客户真的想要智能引号和破折号。
感觉它应该很容易修复,但在涉及编码问题时,我总是有一点心理障碍。
如果它是相关的,这是我的下载标题
composer-php - PhpOffice/PhpSpreadsheet “类 PhpOffice\PhpSpreadsheet\IOFactory 无法加载”
我无计可施。
我在本地开发机器上使用 composer 安装了 PhpOffice,它工作正常。
我将我的应用程序代码上传到远程测试服务器,然后在该服务器上使用 composer 安装了 PhpOffice。
在我的本地机器和远程服务器上,目录结构是相同的:
相关代码(本地和远程相同)是:
但是当我尝试使用 IOFactory 时,我得到:
类 PhpOffice\PhpSpreadsheet\IOFactory 无法加载
仅发生在远程服务器上。我确信问题是愚蠢的,但我无法弄清楚我做错了什么。本地和远程之间的一切似乎都是相同的。
请帮忙。
phpspreadsheet - 如何在不修剪的情况下获取所有工作表名称?
我有工作表名称为 utf-8 的 excel 文件,并且我得到了修剪的工作表名称,因为此工作表标题超过 31 个字符。
我的代码:
在$all
变量中,我得到了所有工作表名称的列表,但所有名称都被修剪了。
但没有变化。
php - PHPSpreadsheet并写入大量小数位
在创建 XLSX 文件并尝试将大量小数位写入数值时,我在使用PHPSpreadsheet时遇到了困难。
PHPSpreadsheet 正在舍入我的小数点后 14 位数字,但我需要它们完全按照呈现方式存储。
我按照文档setFormatCode('0.00000000000000')
中的描述使用,但它没有像我预期的那样工作。
这是我的测试代码:
谁能提供一种方法来存储这么多小数位而不四舍五入?