首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为按名称引用单元格的任何计算获取#N/A

为按名称引用单元格的任何计算获取#N/A
EN

Stack Overflow用户
提问于 2016-02-12 14:17:32
回答 1查看 273关注 0票数 0

我有一个Excel文件,它由8个工作表组成。

在整个Excel文件中,在引用其他工作表中的其他单元格并仅按名称引用它们的各种单元格中都会进行计算。

例如,在工作表2中,我有一个单元格D12,这个单元格中的公式是=CostIssue。CostIssue是工作表1中的单元格。

使用PHPExcel,我成功地读取了Excel文件,操作了一些单元格,然后生成了其中的HTML,但正如我所提到的,在所有引用命名单元格的单元格中,我得到了#N/A。

任何解决这个问题的方法,或者我必须手动编辑整个文件,以另一种方式引用这些命名的单元格(即通过工作表和单元格号)?

谢谢

更新:

更多的信息。第2页,单元格D12 =CostIssue CostIssue是表1中单元格C37的名称,其中包含:=VLOOKUP($C$9,$Params.$B$6:$D$10,2,0)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-20 03:54:01

我一直在研究这个问题,使用Calc引擎调试功能,目前还不清楚实际的问题。

在包含公式D12的工作表Executive Summary上使用单元格=Input!C37,在Input工作表上使用单元格C37包含计算为0.5的公式=VLOOKUP($C$9,Params!$B$6:$D$10,2,FALSE) (格式为单元格中的百分比)。

使用调试代码

代码语言:javascript
运行
AI代码解释
复制
function testFormula($sheet, $cell) {
    $formulaValue = $sheet->getCell($cell)->getValue();
    echo 'Formula Value is ' , $formulaValue , PHP_EOL;
    $expectedValue = $sheet->getCell($cell)->getOldCalculatedValue();
    echo 'Expected Value is '  , ((!is_null($expectedValue)) ? $expectedValue : 'UNKNOWN') , PHP_EOL;


    $calculate = false;
    try {
        $tokens = PHPExcel_Calculation::getInstance($sheet->getParent())
            ->parseFormula($formulaValue, $sheet->getCell($cell));
        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
        $calculate = true;
    } catch (Exception $e) {
        echo 'PARSER ERROR: ' , $e->getMessage() , PHP_EOL;

        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
    }

    if ($calculate) {
        try {
            $cellValue = $sheet->getCell($cell)->getCalculatedValue();
            echo 'Calculated Value is ' , $cellValue , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance($sheet->getParent())
                ->getDebugLog()->getLog());
            echo PHP_EOL;
        } catch (Exception $e) {
            echo 'CALCULATION ENGINE ERROR: ' , $e->getMessage() , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance($sheet->getParent())
                ->getDebugLog()->getLog());
            echo PHP_EOL;
        }
    }
}


$sheet = $objPHPExcel->getSheetByName('Executive Summary');
PHPExcel_Calculation::getInstance($objPHPExcel)
    ->getDebugLog()->setWriteDebugLog(true);

testFormula($sheet,'D12');

我得到了结果

代码语言:javascript
运行
AI代码解释
复制
Formula Value is =Input!C37
Expected Value is 0.5
Parser Stack :-
Array
(
    [0] => Array
        (
            [type] => Cell Reference
            [value] => Input!C37
            [reference] => Input!C37
        )

)

Calculated Value is 0.5
Evaluation Log:
Array
(
    [0] => Testing cache value for cell Executive Summary!D12
    [1] => Executive Summary!D12 => Evaluating Cell C37 in worksheet Input
    [2] => Executive Summary!D12 => Testing cache value for cell Input!C37
    [3] => Executive Summary!D12 -> Input!C37 => Evaluating Cell C9 in current worksheet
    [4] => Executive Summary!D12 -> Input!C37 => Evaluation Result for cell Input!C9 is a string with a value of "both cost and speed-to-market"
    [5] => Executive Summary!D12 -> Input!C37 => Evaluating Cell B6 in worksheet Params
    [6] => Executive Summary!D12 -> Input!C37 => Evaluation Result for cell Params!B6 in worksheet Params is a string with a value of "only cost (speed-to-market remains unchanged)"
    [7] => Executive Summary!D12 -> Input!C37 => Evaluating Cell D10 in worksheet Params
    [8] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!D10
    [9] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluating Cell A10 in current worksheet
    [10] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluation Result for cell Params!A10 is a floating point number with a value of 5
    [11] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluating 5 - 1
    [12] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluation Result is a floating point number with a value of 4
    [13] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluating Cell A10 in current worksheet
    [14] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluation Result for cell Params!A10 is a floating point number with a value of 5
    [15] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluating 5 - 1
    [16] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluation Result is a floating point number with a value of 4
    [17] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluating 4 / 4
    [18] => Executive Summary!D12 -> Input!C37 -> Params!D10 => Evaluation Result is a floating point number with a value of 1
    [19] => Executive Summary!D12 -> Input!C37 => Evaluation Result for cell Params!D10 in worksheet Params is a floating point number with a value of 1
    [20] => Executive Summary!D12 -> Input!C37 => Evaluating Range "Params!B6" : "Params!D10"
    [21] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!C6
    [22] => Executive Summary!D12 -> Input!C37 -> Params!C6 => Evaluating Cell D6 in current worksheet
    [23] => Executive Summary!D12 -> Input!C37 -> Params!C6 => Evaluation Result for cell Params!D6 is a floating point number with a value of 0
    [24] => Executive Summary!D12 -> Input!C37 -> Params!C6 => Evaluating 1 - 0
    [25] => Executive Summary!D12 -> Input!C37 -> Params!C6 => Evaluation Result is a floating point number with a value of 1
    [26] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!C7
    [27] => Executive Summary!D12 -> Input!C37 -> Params!C7 => Evaluating Cell D7 in current worksheet
    [28] => Executive Summary!D12 -> Input!C37 -> Params!C7 => Testing cache value for cell Params!D7
    [29] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluating Cell A7 in current worksheet
    [30] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluation Result for cell Params!A7 is a floating point number with a value of 2
    [31] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluating 2 - 1
    [32] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluation Result is a floating point number with a value of 1
    [33] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluating Cell A10 in current worksheet
    [34] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluation Result for cell Params!A10 is a floating point number with a value of 5
    [35] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluating 5 - 1
    [36] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluation Result is a floating point number with a value of 4
    [37] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluating 1 / 4
    [38] => Executive Summary!D12 -> Input!C37 -> Params!C7 -> Params!D7 => Evaluation Result is a floating point number with a value of 0.25
    [39] => Executive Summary!D12 -> Input!C37 -> Params!C7 => Evaluation Result for cell Params!D7 is a floating point number with a value of 0.25
    [40] => Executive Summary!D12 -> Input!C37 -> Params!C7 => Evaluating 1 - 0.25
    [41] => Executive Summary!D12 -> Input!C37 -> Params!C7 => Evaluation Result is a floating point number with a value of 0.75
    [42] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!C8
    [43] => Executive Summary!D12 -> Input!C37 -> Params!C8 => Evaluating Cell D8 in current worksheet
    [44] => Executive Summary!D12 -> Input!C37 -> Params!C8 => Testing cache value for cell Params!D8
    [45] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluating Cell A8 in current worksheet
    [46] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluation Result for cell Params!A8 is a floating point number with a value of 3
    [47] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluating 3 - 1
    [48] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluation Result is a floating point number with a value of 2
    [49] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluating Cell A10 in current worksheet
    [50] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluation Result for cell Params!A10 is a floating point number with a value of 5
    [51] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluating 5 - 1
    [52] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluation Result is a floating point number with a value of 4
    [53] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluating 2 / 4
    [54] => Executive Summary!D12 -> Input!C37 -> Params!C8 -> Params!D8 => Evaluation Result is a floating point number with a value of 0.5
    [55] => Executive Summary!D12 -> Input!C37 -> Params!C8 => Evaluation Result for cell Params!D8 is a floating point number with a value of 0.5
    [56] => Executive Summary!D12 -> Input!C37 -> Params!C8 => Evaluating 1 - 0.5
    [57] => Executive Summary!D12 -> Input!C37 -> Params!C8 => Evaluation Result is a floating point number with a value of 0.5
    [58] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!C9
    [59] => Executive Summary!D12 -> Input!C37 -> Params!C9 => Evaluating Cell D9 in current worksheet
    [60] => Executive Summary!D12 -> Input!C37 -> Params!C9 => Testing cache value for cell Params!D9
    [61] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluating Cell A9 in current worksheet
    [62] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluation Result for cell Params!A9 is a floating point number with a value of 4
    [63] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluating 4 - 1
    [64] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluation Result is a floating point number with a value of 3
    [65] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluating Cell A10 in current worksheet
    [66] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluation Result for cell Params!A10 is a floating point number with a value of 5
    [67] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluating 5 - 1
    [68] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluation Result is a floating point number with a value of 4
    [69] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluating 3 / 4
    [70] => Executive Summary!D12 -> Input!C37 -> Params!C9 -> Params!D9 => Evaluation Result is a floating point number with a value of 0.75
    [71] => Executive Summary!D12 -> Input!C37 -> Params!C9 => Evaluation Result for cell Params!D9 is a floating point number with a value of 0.75
    [72] => Executive Summary!D12 -> Input!C37 -> Params!C9 => Evaluating 1 - 0.75
    [73] => Executive Summary!D12 -> Input!C37 -> Params!C9 => Evaluation Result is a floating point number with a value of 0.25
    [74] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!C10
    [75] => Executive Summary!D12 -> Input!C37 -> Params!C10 => Evaluating Cell D10 in current worksheet
    [76] => Executive Summary!D12 -> Input!C37 -> Params!C10 => Testing cache value for cell Params!D10
    [77] => Executive Summary!D12 -> Input!C37 -> Params!C10 => Retrieving value for cell Params!D10 from cache
    [78] => Executive Summary!D12 -> Input!C37 -> Params!C10 => Evaluation Result for cell Params!D10 is a floating point number with a value of 1
    [79] => Executive Summary!D12 -> Input!C37 -> Params!C10 => Evaluating 1 - 1
    [80] => Executive Summary!D12 -> Input!C37 -> Params!C10 => Evaluation Result is a floating point number with a value of 0
    [81] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!D7
    [82] => Executive Summary!D12 -> Input!C37 => Retrieving value for cell Params!D7 from cache
    [83] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!D8
    [84] => Executive Summary!D12 -> Input!C37 => Retrieving value for cell Params!D8 from cache
    [85] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!D9
    [86] => Executive Summary!D12 -> Input!C37 => Retrieving value for cell Params!D9 from cache
    [87] => Executive Summary!D12 -> Input!C37 => Testing cache value for cell Params!D10
    [88] => Executive Summary!D12 -> Input!C37 => Retrieving value for cell Params!D10 from cache
    [89] => Executive Summary!D12 -> Input!C37 => Evaluating Function VLOOKUP() with 4 arguments
    [90] => Executive Summary!D12 -> Input!C37 => Evaluating VLOOKUP( "both cost and speed-to-market", { "only cost (speed-to-market remains unchanged)", 1, 0; "mainly cost", 0.75, 0.25; "both cost and speed-to-market", 0.5, 0.5; "mainly speed-to-market", 0.25, 0.75; "only speed-to-market", 0, 1 }, 2, FALSE )
    [91] => Executive Summary!D12 -> Input!C37 => Evaluation Result for VLOOKUP() function call is a floating point number with a value of 0.5
    [92] => Executive Summary!D12 => Evaluation Result for cell Input!C37 in worksheet Input is a floating point number with a value of 0.5
)

这正是我所期望看到的,结果是正确的。

类似地,如果使用toArray()方法,将在单元格12中显示50%

编辑

您能确保您正在为PHPExcel运行最新的开发分支代码吗?因为自从上一个生产版本以来,VLOOKUP()函数已经有了几个修复程序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35373155

复制
相关文章
JavaScript 按值传递 & 按引用传递
其次,对象的比较并非值的比较:对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等。     即使两个对象包含同样的属性和相同的值,它们也是不相等的。各个索引元素完全相等的两个数组也不相等
书童小二
2018/09/03
3.8K0
EXCEL单元格的引用方式
EXCEL单元格的引用包括相对引用、绝对引用和混合引用三种。 相对引用   公式中的相对单元格引用(例如 A1)是基于包含公式和单元格引用的单元格的相对位置。如果公式所在单元格的位置改变,引用也随之改变。如果多行或多列地复制公式,引用会自动调整。默认情况下,新公式使用相对引用。例如,如果将单元格 B2 中的相对引用复制到单元格 B3,将自动从 =A1 调整到 =A2。 绝对引用   单元格中的绝对单元格引用(例如 $A$1)总是在指定位置引用单元格。如果公式所在单元格的位置改变,绝对引用保持
用户1075292
2018/01/23
1.4K0
Range单元格对象引用
大家好,前面介绍了对象模型、对象属性和对象方法的基础知识,后续会介绍各种常用对象,以及他们的常用属性和方法。
无言之月
2019/10/13
1.6K0
浅析按值传递与按引用传递
下列关于按值传递与按引用传递的描述中,正确的是( )。A.按值传递不会改变实际参数的数值 B.按引用传递能改变实际参数的参考地址C.按引用传递能改变实际参数的内容 D.按引用传递不能改变实际参数的参考地址
田维常
2019/12/17
1.2K0
VBA专题13:引用单元格/单元格区域的方法
在VBA中,可以通过多种不同的方式来引用工作表中的单元格/单元格区域。下面是一些引用方法的汇总。
fanjy
2021/08/31
3.9K0
数据集 | 性别(按名称)数据集
该数据集将这些时间段内男婴和女婴的名字的原始计数结合在一起,然后计算出给定总数的名字的概率。来源数据集来自美国,英国,加拿大,澳大利亚等国家的政府机构。
数据科学人工智能
2022/03/30
4980
数据集 | 性别(按名称)数据集
Java的参数传递是「按值传递」还是「按引用传递」?
Java 编程语言中最大的困惑之一就是: java 是按值传递还是按引用传递。我在面试中经常会问面试者这个问题,但还是有很多面试者对这个问题的理解不是很正确。
淡定的蜗牛
2019/11/05
2.7K0
Java的参数传递是「按值传递」还是「按引用传递」?
Range单元格对象引用复习
上节介绍单元格对象的三种表示方式,分别是range、cells属性和快捷方式来表示单元格,由于VBA对象的相关内容对于初学者并不易理解,本节作简单回顾和补充。
无言之月
2019/10/13
8870
获取任何小程序源码
这种方法,并不能反编译出所有的小程序源码,请自知! 具体的局限请看:qwerty472123大神的md文件  https://github.com/qwerty472123/wxappUnpacker 
似水的流年
2019/12/06
4.3K0
Go中没有按引用传递
在Go中两个变量共享同一块内存区域是不可能的。但是两个变量指向的实际存储位置是可以一样的,但这不同于两个变量共享相同的存储区域。
轻吻晴雯
2018/09/27
6180
Go中没有按引用传递
Java中只有按值传递,没有按引用传递!
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递的例子:
java达人
2018/01/31
1.1K0
Java中只有按值传递,没有按引用传递!
按值传递还是引用传递?
改变u的指向不会影响user,但如果改变u指向实例的内容name,那么就会影响到user了
晚上没宵夜
2020/05/06
1.1K0
java是值传递还是引用传递 知乎_按值调用和按引用调用
最近整理面试题,整理到值传递、引用传递,到网上搜了一圈,争议很大。带着一脸蒙圈,线上线下查了好多资料。最终有所收获,所以分享给大家,希望能对你有所帮助。 首先说下我的感受,这个题目出的很好,但是在 Java 中这个题目是有问题的(在下面我会解释)。并且,有很多结论是 Java 中只有 值传递。我认为这样说不够严谨。当然如果针对 Java 语言本身来讲,Java 中只有 值传递,没有引用传递,是正确的。但是如果针对 值传递,引用传递的定义来说,Java 中还是有引用传递的。下面来分析:
全栈程序员站长
2022/11/03
9660
使用Python获取Excel文件中单元格公式的计算结果
假设有如下Excel文件,其中第二个WorkSheet中数据如下: 其中D列为公式,现在要求输出该列公式计算的数值结果,代码如下: 代码运行结果:
Python小屋屋主
2018/04/16
4.1K0
使用Python获取Excel文件中单元格公式的计算结果
VBA: 禁止单元格移动,防止单元格公式引用失效
文章背景: 在工作生活中,存在文件共享的情况。在数据处理时,单元格公式中往往要引用原始数据源。多人操作时,每个人的操作习惯不同,如果数据源的单元格不小心被人为移动或删除,会导致单元格公式引用失效,产生#REF! 错误。如果进行的是跨表引用,这种错误往往还很难发现。
Exploring
2022/09/20
7890
【Kotlin】:: 双冒号操作符详解 ( 获取类的引用 | 获取对象类型的引用 | 获取函数的引用 | 获取属性的引用 | Java 中的 Class 与 Kotlin 中的 KClass )
在 Kotlin 中 , :: 双冒号操作符 的作用是 获取 类 , 对象 , 函数 , 属性 的 类型对象 引用 ;
韩曙亮
2023/03/30
4.9K0
【Kotlin】:: 双冒号操作符详解 ( 获取类的引用 | 获取对象类型的引用 | 获取函数的引用 | 获取属性的引用 | Java 中的 Class 与 Kotlin 中的 KClass )
根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID
随着 Kubernetes 越来越火爆,运维人员排查问题难度越来越大。比如我们收到监控报警,某台 Kubernetes Node 节点负载高。通过 top 或者 pidstat 命令获取 Pid,问题来了,这个 Pid 对应那个 Kubernetes Pod 呢?
YP小站
2020/07/21
3.4K0
Excel VBA解读(140): 从调用单元格中获取先前计算的值
如果有一个依赖于一些计算慢的资源的用户定义函数,可能希望该用户定义函数在大多数情况下只返回其占用的单元格中最后一次计算得到的值,并且只偶尔使用计算慢的资源。
fanjy
2019/07/19
6.8K0
单元格自动计算
在我们填报报表时,有的单元格的数据是需要通过自动计算直接获得,但是不是所有的函数都支持填报自动计算,这是为什么呢?
用户10133222
2022/12/15
3210
VBA: 禁止单元格移动,防止单元格公式引用失效(2)
文章背景: 在Excel中,公式引用无效单元格时将显示 #REF! 错误。当公式所引用的单元格被删除或被粘贴覆盖时最常发生这种情况。
Exploring
2022/09/20
1.2K0

相似问题

在n行和列处获取单元格(按名称)

20

按名称获取Lua函数引用

10

按单元格名称计算的表列之和

12

VB按单元格名称获取范围

10

从按名称引用的单元格调用公式

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文