F#将Excel文件parsing为元组数组

我对这个post有一个后续问题。 我想将Excel电子表格的内容放入一个元组数组中,其中每个元组对应于电子表格中的每一行。

我开始循环虽然整个范围是这样的:

let path = "XXX.xlsx" let app = ApplicationClass(Visible = false) let book = app.Workbooks.Open path let sheet = book.Worksheets.[1] :?> _Worksheet let content = sheet.UsedRange.Value2 :?> obj[,] for i=content.GetLowerBound(0) to content.GetUpperBound(0) do for j=content.GetLowerBound(1) to content.GetUpperBound(1) do 

但是,我觉得效率很低。 如果基础API规范中有某些东西可以使用,

提前致谢

Array2D模块实现了2D数组的一些常用function。

我猜你想要使用Array2D.iterArray2D.iteri来代替你的for循环。

将每行(二维数组)转换成一个元组(在一维行中)的直接方法是完成你开始的工作 – 只需遍历所有的行并构造一个元组:

 let tuples = [ for i in contents.GetLowerBound(0) .. contents.GetUpperBound(0) -> contents.[i,0], contents.[i,1], contents.[i,2] ] 

要做到这一点,你需要知道(静态)行的长度。 这是因为F#元组是固定长度的元组,并且检查长度。 上面的例子假定只有3个索引为02元素。 如果长度是dynamic的,那么你可能应该继续使用2D数组而不是元组列表。

另一种select是完全绕过Excel引擎。 有几种方法可以做到这一点,但是我获得了巨大成功的是“SpreadsheetGear”。 它不是免费的(带来降价),但它复制Excel API非常密切,速度非常快。