我正在使用ExcelDNA为 Excel 编写 F# 插件 UDF ,理想情况下,我希望根据另一个 CSV 的内容动态加载 CSV。
我一直在下面的 F# 数据库中使用类型提供程序和 csv 解析器:http: //fsharp.github.io/FSharp.Data/library/CsvProvider.html
类型提供程序不会让我在编译时间之前将变量作为字符串传递,因为它不是静态的(也许我做错了 - 请参阅下面的代码,它不起作用)。
let getcontractperiod = new CsvProvider<"P:/Datastructures/contract_variables.csv", ",">()
let contractperiodfilelocation = getcontractperiod.Filter(fun row -> row.ContractModelID="MyContractTest").Data
let closescc = [| yield! contractperiodfilelocation |> Seq.map (fun x -> x.FileLocation) |]
let onstructure = new CsvProvider<closescc.[0], ",">()
提供的类型的静态参数无效。需要一个“字符串”类型的参数。
但是,如果我使用来自同一个库的 CSV 解析器,它可以工作(但是我失去了提供程序的强类型方面)。
let getcontractperiod = new CsvProvider<"P:/Datastructures/contract_variables.csv", ",">()
let contractperiodfilelocation = getcontractperiod.Filter(fun row -> row.ContractModelID="MyContractTest").Data
let closescc = [| yield! contractperiodfilelocation |> Seq.map (fun x -> x.FileLocation) |]
let onstructure = CsvFile.Load(closescc.[0]).Cache()
我想知道的是:
由于这将在 Excel 中多次调用,如果使用 CsvParse 方法与 CSV 类型提供程序相比会有显着的性能损失,特别是如果我需要在csvparse 方法。
注意我需要为每个计算加载大约 4 个 csv,这些 csv 大约有 600-2000 行长。在这个阶段我没有去数据库的选项。
谢谢你。