问题标签 [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.

0 投票
0 回答
5960 浏览

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

在所有情况下我都遇到了同样的错误。

0 投票
1 回答
1167 浏览

php - 如何在 PhpSpreadsheet 中修复 TcPDF 编写器中的边框?

我有一个将数据导出到 XLSX 和 PDF 的 PhpSpreadsheet 流程。我正在使用 TcPDF 作为 PDF 编写器。但是 TcPDF 在转换/翻译边框样式方面存在问题。

XLSX 导出

在此处输入图像描述

TcPDF 导出

在此处输入图像描述

有什么想法可以解决这个问题吗?

0 投票
2 回答
3655 浏览

php - 使用 PHP Word 阅读 MS Word 文档

我已经在 PHPStorm (IDE) 上安装并设置了 PHP Word。我正在尝试使用 PHPWord 从下面标题为 'helloWorld.docx' 的 word 文档中阅读“从昨天学习,为今天而活,为明天的希望...... ”这行。

在此处输入图像描述

这是我到目前为止加载和阅读文档的代码:

输出:

完整的输出太长,无法发布,但如果您向下滚动,您可以在此片段中看到我正在寻找的字符串

我的主要问题是“有没有办法在不使用 var_dump 和搜索大量输出的情况下找到这个字符串?

0 投票
1 回答
1613 浏览

php - 无法正确设置 setPrintArea

我正在使用 phpspreadsheet 的 v1.3.1。

我正在构建一个 excel 文件(下载),一切正常。唯一的问题是定义 setPrintArea ......它总是将标准 PrintArea 返回到 excel 中。基本上,我构建了 excels 行并在定义 printArea 之后......我之前也尝试过,但没有成功。

该区域有 58 行,但我无法将该区域设置为“AG”单元格......基本上,我想在一页中打印我所有的 excel,而不是 8。

谢谢 !

0 投票
0 回答
967 浏览

php - PHPWord代码无法编辑模板并另存为新文件

我正在制作一个记录公司员工所有数据和文件的页面,它的部分功能是生成身份证,这是我正在努力解决的部分。

我下载了 PHP Word,首先安装了 composer 并使用它在项目的根目录(php 页面所在的位置)安装 PHPWord 库,它安装了以下文件和文件夹:

-composer.lock -composer.json -vendor(这个是包含所有库的文件夹)

“vendor”子文件夹和文件:-autoload.php -composer(文件夹)-pclzip(文件夹)-phpoffice(文件夹)-zendframework(文件夹)

我认为这是安装它所要做的一切,所以我继续添加代码,问题是它不起作用......这是代码,我添加了注释以进一步解释:

所以是的,我意识到问题本身可能是 PHPWord 代码,要么是我的代码有问题,要么是库没有正确安装,我尝试运行 php 模板本身来测试该模板是否有效,但它也不起作用

0 投票
0 回答
525 浏览

php - 保存 rtf 文件时的问题(phpword lib)

当我用 phpword lib 保存 RTF 文件时,我遇到了一些问题。

我用 . 打开一个 RTF 文件IOFactory::load,然后用函数 write 保存它,文件上有一些元数据,我不知道为什么。

这是我的代码:

当我打开已保存的新文件时,它显示:

如果有人知道为什么我的文件中有一些元数据会很好。

0 投票
0 回答
820 浏览

phpword - 在 PHPWord 中编码 HTML 实体

我有一个包含(我认为)从 Word 剪切并粘贴到 TinyMCE 的内容的数据库。我现在需要使用 PHPWord(最新版本)将这些记录转回 Word 文档。

数据中充满了 html 十六进制字符代码,例如 “ 和 – 我需要将其转换为破折号、项目符号和引号。该代码作为 UTF-8 完美地服务于浏览器,但我没有尝试将其转换为 Word 文档。

没有任何操作会给我一个我无法打开的文件。

这给了我一个[square]¢

虽然这给了我每个人一个正方形......

我可以得到一个字符串替换来将破折号和引号变成简单的字符,但是客户真的想要智能引号和破折号。

感觉它应该很容易修复,但在涉及编码问题时,我总是有一点心理障碍。

如果它是相关的,这是我的下载标题

0 投票
1 回答
3165 浏览

composer-php - PhpOffice/PhpSpreadsheet “类 PhpOffice\PhpSpreadsheet\IOFactory 无法加载”

我无计可施。

我在本地开发机器上使用 composer 安装了 PhpOffice,它工作正常。

我将我的应用程序代码上传到远程测试服务器,然后在该服务器上使用 composer 安装了 PhpOffice。

在我的本地机器和远程服务器上,目录结构是相同的:

相关代码(本地和远程相同)是:

但是当我尝试使用 IOFactory 时,我得到:

类 PhpOffice\PhpSpreadsheet\IOFactory 无法加载

仅发生在远程服务器上。我确信问题是愚蠢的,但我无法弄清楚我做错了什么。本地和远程之间的一切似乎都是相同的。

请帮忙。

0 投票
1 回答
4026 浏览

phpspreadsheet - 如何在不修剪的情况下获取所有工作表名称?

我有工作表名称为 utf-8 的 excel 文件,并且我得到了修剪的工作表名称,因为此工作表标题超过 31 个字符。

我的代码:

$all变量中,我得到了所有工作表名称的列表,但所有名称都被修剪了。

我试图评论这部分代码: https ://github.com/PHPOffice/PhpSpreadsheet/blob/develop/src/PhpSpreadsheet/Worksheet/Worksheet.php#L853-L882

但没有变化。

0 投票
1 回答
2139 浏览

php - PHPSpreadsheet并写入大量小数位

在创建 XLSX 文件并尝试将大量小数位写入数值时,我在使用PHPSpreadsheet时遇到了困难。

PHPSpreadsheet 正在舍入我的小数点后 14 位数字,但我需要它们完全按照呈现方式存储。

我按照文档setFormatCode('0.00000000000000')中的描述使用,但它没有像我预期的那样工作。

这是我的测试代码:

谁能提供一种方法来存储这么多小数位而不四舍五入?