C# EPPlus返回#值!当与公式偏移一起使用时,不使用单元格内容,而是使用间接&;匹配
我有一个Excel文件,其中有一个表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的值时,我得到了#值
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。我把这个贴错了问题……现在巨魔要出来了。