我正在使用ExcelDNA编写一个F#插件UDF,理想情况下,我希望根据另一个CSV文件的内容动态加载CSV文件。 我一直在使用以下F# Data库中的类型提供程序和CSV解析器:http://fsharp.github.io/FSharp.Data/library/CsvProvider.html。由于它不是静态的,类型提供程序不允许我在编译之前将变量作为字符串传递(也许我做错了什么-请参见下面不起作用的代码)。
无效的静态参数,期望一个“字符串”类型的参数。
但是,如果我使用相同库中的CSV解析器,它可以工作(但是我会失去提供程序的强类型方面)。
我想知道的是:
由于这将在Excel中被多次调用,如果使用CsvParse方法与CSV类型提供程序相比存在显着的性能损失,特别是如果我需要在csvparse方法中进行任何转换/强制转换。
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行。 我现阶段无法选择去数据库。
谢谢。
SqlEntityConnection
(数据库提供程序)的情况下,确实需要一个连接字符串来创建类型,但随后可以在创建上下文时提供不同的连接字符串作为参数。只要两个数据库相同,它就能很好地工作。CSV提供程序中没有这样的选项吗? - Patryk Ćwiek