Excel DNA UDF 获取未处理的值作为输入
Excel DNA UDF obtain unprocessed values as inputs
我在 F# 中编写了几个辅助函数,使我能够通过 COM/PIA 接口处理 Excel 的动态特性。但是,当我在 Excel-DNA UDF 中使用这些函数时,它们无法按预期工作,因为 Excel-DNA 正在预处理来自 excel 的数组中的值。
例如null
变成 ExcelDna.Integration.ExcelEmpty
这干扰了我自己的验证代码,该代码预计 null
。我可以通过在我的模式匹配中添加一个额外的案例来解决这个问题:
let (|XlEmpty|_|) (x: obj) =
match x with
| null -> Some XlEmpty
| :? ExcelDna.Integration.ExcelEmpty -> Some XlEmpty
| _ -> None
不过转换再转换感觉有点浪费。有没有办法告诉 Excel-DNA 不要对 UDF 中的范围值进行额外处理,并提供等同于 COM/PIA 接口的它们?即 Range.Value XlRangeValueDataType.xlRangeValueDefault
编辑:
我这样声明我的论点 obj
:
[<ExcelFunction(Description = "Validates a Test Table Row")>]
let isTestRow (headings: obj) (row: obj) =
let validator = TestTable.validator
let headingsList = TestTable.testHeadings
validateRow validator headingsList headings row
我做了更多的挖掘,@Jim Foye 的建议问题也证实了这一点。对于 UDF,Excel-DNA 在 C API 而不是 COM 上工作,因此必须进行自己的编组。此文件中显示了可能的值:
使用 ExcelEmpty
(用户提供了一个空单元格)的原因是对于 UDF,参数也可以是 ExcelMissing
(用户未提供任何参数),这可能都是合理的null
并且有必要去歧义。
我将调整我的模式匹配以兼容 COM 封送处理和 ExcelDNA 封送处理。
我在 F# 中编写了几个辅助函数,使我能够通过 COM/PIA 接口处理 Excel 的动态特性。但是,当我在 Excel-DNA UDF 中使用这些函数时,它们无法按预期工作,因为 Excel-DNA 正在预处理来自 excel 的数组中的值。
例如null
变成 ExcelDna.Integration.ExcelEmpty
这干扰了我自己的验证代码,该代码预计 null
。我可以通过在我的模式匹配中添加一个额外的案例来解决这个问题:
let (|XlEmpty|_|) (x: obj) =
match x with
| null -> Some XlEmpty
| :? ExcelDna.Integration.ExcelEmpty -> Some XlEmpty
| _ -> None
不过转换再转换感觉有点浪费。有没有办法告诉 Excel-DNA 不要对 UDF 中的范围值进行额外处理,并提供等同于 COM/PIA 接口的它们?即 Range.Value XlRangeValueDataType.xlRangeValueDefault
编辑:
我这样声明我的论点 obj
:
[<ExcelFunction(Description = "Validates a Test Table Row")>]
let isTestRow (headings: obj) (row: obj) =
let validator = TestTable.validator
let headingsList = TestTable.testHeadings
validateRow validator headingsList headings row
我做了更多的挖掘,@Jim Foye 的建议问题也证实了这一点。对于 UDF,Excel-DNA 在 C API 而不是 COM 上工作,因此必须进行自己的编组。此文件中显示了可能的值:
使用 ExcelEmpty
(用户提供了一个空单元格)的原因是对于 UDF,参数也可以是 ExcelMissing
(用户未提供任何参数),这可能都是合理的null
并且有必要去歧义。
我将调整我的模式匹配以兼容 COM 封送处理和 ExcelDNA 封送处理。