使用 PHPExcel 读取 Excel 文件时忽略计算值

2024-05-03

我正在使用 setReadDataOnly(true) 读取 XLS 文件。读取的对象将再次保存为新的 Excel 文件。不幸的是,某些单元格值计算不正确(这与使用小计公式的单元格的计算错误有关)。如果我理解正确的话,XLS 文件中的每个单元格都包含一个预先计算的值以及公式。如果我能让 PHPExcel 在读取文件时不尝试计算公式(而只是按原样使用预先计算的值),我就可以解决这个问题。我认为 setReadDataOnly(true) 或 setPreCalculateFormulas(false) 可能会实现此目的,但事实并非如此。

附加信息

感谢 Mark 的解释,我研究了我的案例中 getCalculatedValue() 和 getOldCalculatedValue() 之间的区别。我使用以下代码读入文件,然后再次写出:

$excel_reader = PHPExcel_IOFactory::createReaderForFile($file);
$excel_reader->setReadDataOnly(true);
$excel_obj_temp = $excel_reader->load($file);

// Test one of the values in question
$excel_obj_temp->setActiveSheetIndexByName("Form 11");
error_log("val:".$excel_obj_temp->getActiveSheet()->getCell("E36")->getCalculatedValue());
error_log("old_val:".$excel_obj_temp->getActiveSheet()->getCell("E36")->getOldCalculatedValue());

$new_file = "new_generated_name";

$excel_writer = new PHPExcel_Writer_Excel5($excel_obj_temp);
$excel_writer->setPreCalculateFormulas(false);
$excel_writer->save($unprotected_file);

读取文件时,它会使用 getOldCalculatedValue() 显示正确的值。如果我然后保存文件withoutsetPreCalculateFormulas(false) 并再次读入文件, getCalculatedValue() 和 getOldCalculatedValue() 返回相同(不正确)的结果。这与 Mark 的解释一致,即如果不设置 setPreCalculateFormulas(false),则在保存时将重新计算值

但是,如果我保存文件withsetPreCalculateFormulas(false) (这似乎是正确的方法)并再次读取文件, getCalculatedValue() 返回不正确的结果, getOldCalculatedValue() 返回 0,这是错误的。

为什么保存后缓存的值会被清除?是否需要与 setPreCalculateFormulas(false) 一起应用一些其他设置?


PHPExcel 可以not加载电子表格文件时计算任何值。如果您显式调用单元格的值,它只会计算单元格值getCalculatedValue() or getFormattedValue()方法,或者默认情况下保存时(除非您使用 Writer 的setPreCalculateFormulas(false))...尽管使用自动调整列会强制在保存这些列中的任何单元格时重新计算,而不管任何其他设置如何。

MS Excel 通常会保存电子表格中所有公式单元格的计算值(除非明确禁用此功能),并且可以使用单元格的 getOldCalculatedValue() 方法在 PHPExcel 中读取该值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHPExcel 读取 Excel 文件时忽略计算值 的相关文章

  • 在 PHPExcel 中设置方向表

    我试图将数据库数据导出到 Excel 文件 因此我使用 PHPExcel 类 我的工作表应该是从右到左 如何在 PHPExcel 中将工作表方向切换为 RTL 直接引用开发人员文档 该文档可以在发行版的 Documentation 文件夹中
  • 将两个或多个 xls 文件合并为工作表 PHPExcel

    我一直在到处寻找如何使用两个现有文件执行此操作 看起来所有文档都是关于创建新文件的 我想获取其中一个文件并将第二个文件作为新工作表添加到其中 然后将其保存到服务器 我一直在尝试这样的做法 但没有成功 file test xls file2
  • 在php中将数字等字母增加一定的值

    在 php 中如果我写 c A c 它递增到 B 但如果我想将其递增 2 3 或更多 例如 c 2 或 c 3 获取替代字母表 for column B column lt highestColumn column cell workshe
  • 在浏览器中显示 Excel 文件。 PHPExcel

    例如我正在使用这样的代码
  • 以 PHP 计算利率

    我正在尝试计算给定初始贷款金额 还款次数和还款金额的贷款利息 我似乎无法使用基本公式获得足够接近的数字 因此我一直在尝试使用牛顿拉夫森方法 可以在此处看到该方法的使用 http www efunda com formulae finance
  • PHPExcel 从 url 导入文件

    我想使用 phpexcel 从网站导入 tsv 文件 使用区域设置文件可以正常工作 但是如果我更改 http 上的文件位置 则无法工作 inputFileType CSV data http www domain com file tsv
  • 使用 PHPExcel 从 Excel 读取数字时出现问题

    我正在尝试使用 PHPExcel 从 Excelsheet 中读取数字 我读取数据的代码 objReader PHPExcel IOFactory createReaderForFile upload file objReader PHPE
  • 将一张工作表的内容和样式克隆到另一张工作表 - PHP Excel

    我需要将 Excel 工作簿中一张工作表的内容复制到新 Excel 工作簿中的一张工作表 问题是 我不知道这些工作表包含什么或其格式 但是 每次都只是第一张 我尝试过一种方法 但每次都会耗尽内存 所以我想我应该逐行执行 100 000 行
  • PHPExcel:数据验证不适用于 .xls 格式

    我有一个包含两张表的 Excel 文件 工作表 List 将显示的项目列表Worksheet工作表作为列表项 请看下面的图片 我想使用生成这个PHPExcel图书馆 我已经尝试过 但没有得到预期的结果 请参阅我的下面的代码 objPHPEx
  • PHPExcel 获取相对于给定列的列名

    使用 PHPExcel 是否可以获取位于左侧或右侧 X 列的列的名称 例如 给定列 BZ 我想返回列名称 CB 或 BX 向右或向左 2 个 Thanks PHPExcel 中已经内置了一些函数来帮助您执行此操作 adjustment 2
  • 在 Zend Autoloader 中找不到 PHPExcel 类

    我在 Zend Framework 中的命名空间上遇到了困难 至少我认为这是一个命名空间问题 我想将 PHPExcel 集成到我的 Zend 项目中 相关文件结构如下 library ABCD PHPExcel Zend ZendX PHP
  • 我如何在 PHPExcel 中制作项目符号列表

    我试图使用将 html 标签从 php 转换为 excelPHPExcel 一切都很顺利 除了我找不到如何制作项目符号列表 PHPExcel 中是否存在此功能 我已经扫描了 PHPExcel 的一些纪录片 但我找不到任何有关子弹的内容 我想
  • 有没有办法检测Excel文件是使用PHPExcel在Windows还是Mac上生成的?

    我正在使用 PHPExcel 生成一个 xls 模板 用户可以下载该模板并用他想要的数据填充它 众所周知 Excel以数字格式保存日期 我正在使用此函数来转换数据并返回时间戳 public static function excelToTi
  • 使用 PHPExcel 下载 xls 文件时出现损坏

    在我当前的项目中 我使用 PHPExcel 1 7 8 将数据导出到 Excel 按照建议 我在项目中成功配置了它 并成功生成了 xls 文件并存储了它 但是当我尝试下载 xls 文件时 我损坏了 xls 文件 而没有收到任何错误消息 我有
  • 使用PHPExcel制作自动生成excel文件

    我想让我的 Excel 文件填充从数据库中获取的一些数据 例如某人的姓名和年龄 假设我的数据库中有 10 个人 我希望将这 10 个人包含在我的 Excel 文件中 所以基本上 你会得到 姓名年龄 人1 20岁 人2 25岁 等等 我知道如
  • PHPExcel 检查工作表是否存在

    我正在使用 phpExcel 但找不到任何内容来检查工作表是否存在 我想要完成的是这样的事情 if excel gt sheetExists 1 excel gt createSheet 1 sheet excel gt setSheet
  • 如何使用 PHPSpreadsheet 在 Excel 上添加新行

    您好 我是这个名为 PHPSpreadsheet 的库的新手 我尝试阅读它的文档 但我无法理解它 我想在existingExcel 文件和 这是我到目前为止所拥有的
  • 为什么 PHPexcel 在日期字段中插入单引号?

    我正在尝试使用 PHPExcel 将日期插入单元格 这是我的代码 include xlsx Classes PHPExcel php include xlsx Classes PHPExcel Calculation php include
  • phpexcel在单元格范围上设置数据类型

    With PHPExcel http phpexcel codeplex com 我在用着 workSheet gt fromArray array 设置我的数据 但是 需要将一列设置为字符串 带有前导零的数字 如果不设置为字符串 前导零将
  • PHPExcel 日期字段与源电子表格不匹配

    这是我的电子表格中的内容 12 04 2011 8 56 17 p m xls dateserial 40645 87242 这是我用来提取日期并转换为 PHP 中的日期字符串的代码 txn date xls sheet gt getCel

随机推荐

  • nginx - 记录 SSL 握手失败

    我正在运行启用了 SSL 的 nginx 服务器 我的协议 密码设置相当安全 我已经在 ssllabs com 上检查过它们 但是 因为这是一个由我无法控制的 http 客户端调用的 Web 服务 所以我担心兼容性 重点是 有没有办法在我的
  • 将 size_t 变量添加到指针

    我想向指针添加 size t 类型 有些像这样 void function size t sizeA size t sizeB void pointer pointer malloc sizeA pointer pointer sizeB
  • Javascript 仅在 Chrome 中打开开发者工具后才起作用

    我和这里有同样的问题 为什么JavaScript只有在IE中打开开发者工具一次后才能工作 https stackoverflow com questions 7742781 why javascript only works after o
  • 从 Git 中的分支父级中提取更改

    如何从 Git 中的分支的父级中提取更改 特别是在 github 配置的项目中 例如 假设我分叉了http github com originaluser originalproject http github com originalus
  • 按分区“内”键进行高效分组

    我正在尝试调整一个流程来激发火花 基本上 该过程分析来自 JDBC 数据源的批量数据 每条记录都有一个batchId 还有一个更高级别的groupId 批次数量较大 提前未知 组数约为 100 RAM 中可以容纳每个批次的记录数 实际的分析
  • 如何对具有无效值的属性使用 JSON.net 的默认值

    我正在使用 Newtonsoft JSON 库来反序列化来自 Web 服务的响应 问题是某些字段包含无效值 例如 一条记录上的一个字段包含一个 T 表示该字段应该是数字 我想做的是将无效字段的值设置为 null 或其他默认值 我的所有属性都
  • 为什么文件传输完成后我的列表视图条目的内容没有更新?

    为什么将文件复制到目录后listview没有更新驻留在该目录中的较新内容 仅当我退出时listview重新进入视图会刷新吗 有人可以告诉我如何解决这个问题吗 文件功能java文件的复制 您应该将新复制的文件 VideoInfo对象 添加到您
  • 在 NoSQL 存储中存储图像

    我们的应用程序将通过 HTTP 提供大量缩略图大小的小图像 大小约为 6 12KB 我被要求调查使用 NoSQL 数据存储是否是一个可行的数据存储解决方案 理想情况下 我们希望我们的数据存储是容错且分布式的 在 NoSQL 存储中存储 bl
  • 如何打开相机然后切换到图像模式(反之亦然)

    就我而言 我想拍照或捕捉视频 实际上 如果我创建单独的意图 我可以做到这些 我的意思是我可以将相机打开为图像模式或视频模式 但无法在它们之间切换 这与我使用的意图过滤器有关吗 我应该怎么办 我如何在它们之间切换 我有同样的问题 在我想放置一
  • 使用 .NET Core Razor Pages 将文件下载到浏览器

    使用 ASP NET Razor Pages 我尝试将文件下载到浏览器 在页面 html 中 使用这样的链接效果很好 href DownloadableFiles testB csv download newname gt Download
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • 常见的 Web UI 样式

    在接下来的几天里 我必须向我的一位客户展示一个 Web 应用程序的原型 问题是我不太擅长 CSS 最糟糕的是我几乎对得到的结果不满意 编写业务逻辑对我来说没有任何挑战 但 UI 设计却占用了我 80 以上的时间 我不需要什么令人惊叹的东西
  • /etc/php5/conf.d 文件夹中的 .ini 文件有什么用?

    我知道 ini 文件位于 etc php5 cli与 PHP 的 CLI 使用有关 文件位于 etc php5 fpm是关于 PHP 的 FastCGI FPM 方面 但是位于以下位置的 ini 文件又如何呢 etc php5 conf d
  • 用户登录时如何更新updated_at列?

    我正在尝试更新updated at每次用户登录时 列到当前时间 但我收到以下错误 InvalidArgumentException 找不到四位数年份 数据丢失 PHP input Input all remember Input has r
  • 对 JFace Treeviewer 多列进行排序

    我希望用户能够对TreeViewer只要他想 只要单击列标题即可 但是我不知道正确的方法 我发现我们可以使用ViewerComparator对不同的元素进行排序 但是 我不知道如何设置侦听器以便能够正确进行升序或降序排序 有没有办法让 JF
  • 条件中的 T-SQL USE 语句

    看来USE语句是由MS SQL Server 2008R2编译的 例如 if 1 0 begin USE MyDB end 结果将在执行中USE MyDB同时忽略 IF 语句 如何改变它以适应条件 附 也尝试过execute sp exec
  • 寻找 jQuery 效果来逐渐显示隐藏的 DIV/图像

    可能我错过了一些明显的东西 但我无法弄清楚如何慢慢地显示隐藏的图像 DIV 以便它从上到下显示 如果你看一下这个 jsfiddle 你会看到我试图在 jQuery 中使用 show 来显示的图像 http jsfiddle net nick
  • 委托:方法名称预期错误

    我正在尝试让以下简单的委托示例正常工作 根据我从中取出的一本书 应该没问题 但我得到了Method name expected error namespace TestConsoleApp class Program private del
  • Android studio - 如何使用 gradle 中的可执行 jar 文件

    所以我有一个 custom rules xml 文件 我试图在 gradle 中重建 到目前为止 我对其他所有事情都没有问题 但我试图完成的最后一部分是在我使用 gradle 构建过程生成的未签名 apk 上运行一个特殊的 apk 签名工具
  • 使用 PHPExcel 读取 Excel 文件时忽略计算值

    我正在使用 setReadDataOnly true 读取 XLS 文件 读取的对象将再次保存为新的 Excel 文件 不幸的是 某些单元格值计算不正确 这与使用小计公式的单元格的计算错误有关 如果我理解正确的话 XLS 文件中的每个单元格