C# EPPlus返回#值!当与公式偏移一起使用时,不使用单元格内容,而是使用间接&;匹配

C# EPPlus返回#值!当与公式偏移一起使用时,不使用单元格内容,而是使用间接&;匹配,c#,epplus,epplus-4,C#,Epplus,Epplus 4,我有一个Excel文件,其中有一个表tblPhoneCode,有两列Country和code,还有一个单元格B1,其中列表数据验证指向Country列 单元格B2基本上显示所选国家的代码 单元格B2使用以下公式 OFFSET(INDIRECT("tblPhoneCode[#Headers]"),MATCH(B1,INDIRECT("tblPhoneCode[Country]"),0),1,1,1) Excel中的一切都正常工作,但问题是当我在C中使用EPPlus读取B2的值时,我得到了#值

我有一个Excel文件,其中有一个表
tblPhoneCode
,有两列
Country
code
,还有一个单元格B1,其中列表数据验证指向
Country

单元格B2基本上显示所选
国家的
代码

单元格B2使用以下公式

OFFSET(INDIRECT("tblPhoneCode[#Headers]"),MATCH(B1,INDIRECT("tblPhoneCode[Country]"),0),1,1,1)
Excel中的一切都正常工作,但问题是当我在C中使用EPPlus读取B2的值时,我得到了
#值
而不是实际的手机
code
。我尝试了从工作簿、工作表到单元格的
.Calculate()
,尝试访问的值仍然相同。我已经连接了记录器,它显示为空,并且没有错误记录

C#代码

输出:

Country:    US
Phone Code: #VALUE!
Country:        Germany
Phone Code:     49

非常感谢您的帮助或见解,我正在使用MS Excel 2010、.NET 4.0、EPPlus 4.1.0和Windows 10 64位创建电子表格的快速副本:

并确认了您得到的相同结果-单元格
B2
的值为
#value。通过阅读文档/EPPlus源代码示例,结果令人惊讶,看起来像是一个bug或“功能”。查看了其他一些
ExcelWorkbook
ExcelWorkbook
成员,发现设置
ExcelWorkbook。FullCalcOnLoad
属性解决了以下问题:

输出:

Country:    US
Phone Code: #VALUE!
Country:        Germany
Phone Code:     49
更新
过帐后,检查默认值
FullCalcOnLoad
,该值显示为
true
。事实上,删除
Calculate()
调用并将
FullCalcOnLoad
保留为默认值(不设置属性)似乎也能正常工作,并提供所需的输出。

也许最初发布问题时,此文档或功能不存在,但我遇到了同样的问题,并尝试了互联网上的所有建议。如果您在“一些常见错误”一节下访问EPPlus,您将发现:

不要在公式中添加前导=符号。“=SUM(A1:A2)”是错误的,“SUM(A1:A2)”是正确的

最初,我的代码看起来像:

sheet.Cells["A1"].Formula = "=SUM(A2:A5)";
删除前导=符号时:

sheet.Cells["A1"].Formula = "SUM(A2:A5)";

该工作表在Excel中完全加载(即使在安全模式下),所有公式都在“启用编辑”之前进行计算。

请尝试package.工作簿.Worksheets[1]。单元格[“B2”].Value.ToString();我尝试了使用和不使用
.ToString()
的相同结果,请参见输出。我甚至尝试了
.Text
我明白了,为什么不在C#中使用字典,而不是读取值(国家代码),只需读取键(国家名称)并从字典中获取值。这只是一个示例场景,重现了我最初使用EPPLUS从Excel读取时遇到的问题,但它不起作用,因此我尝试了.Calculate()但仍然不起作用,那么现在它在没有.Calculate()的情况下又能工作了,我很困惑。@Ash-同意。从阅读文档和,我想,
Calculate()
是必需的……Crud。我把这个贴错了问题……现在巨魔要出来了。