我有一个Excel RangePtr
对象,我正在尝试将其相应的单元格转换为值而不是公式。我习惯在VBA中这样做,只需使用r.Value = r.Value
即可。在C ++中,我尝试了一种类似的方法:
rng->Value = rng->Value;
但是当我运行它时,我从HRESULT 0x8004005
得到一个例外。单元格值中没有任何内容会导致Excel窒息;返回的值应该只是包含_variant_t
SAFEARRAY
个double
值的var state = Immutable.fromJS({
cmsData: {
"pages": [
{
"name": "page1",
"content": {
"header": "Example header",
"intro": "Example intro",
"body": "Example body",
}
}
]
}});
。那么我做错了什么?
答案 0 :(得分:0)
D'哦。看起来RangePtr.Value
实际上必须指定一个XlRangeValueDataType
常量,这在VBA中不存在:
rng->Value[Excel::XlRangeValueDataType::xlRangeValueDefault] = rng->Value;
或者我可以使用Value2
属性而不是普通Value
:
rng->Value2 = rng->Value2;
希望这对将来遇到此问题的其他人有所帮助。
答案 1 :(得分:0)
经过痛苦的搜索,我得出了同样的结论,并使用 value[Excel::XlRangeValueDataType::xlRangeValueDefault] 在 c# 或 vb 在 C++/CLI 中获得相当于 range.value 的值。让我看看这是否有效...是的,这就是解决方案,它有效!
顺便说一句:如果您需要使用 Range::Address 属性,您可以使用样式 地址[false, false, Excel::XlReferenceStyle::xlA1, Type::Missing, Type::Missing];当然,使用适当的参数。
此外,关于 value 属性,我发现可以通过以下方式检查单元格值的存在: 值[Excel::XlRangeValueDataType::xlRangeValueDefault] != nullptr
通常,“safe_cast