F#将Excel文件解析为元组数组

时间:2013-06-04 12:30:27

标签: excel f#

我在this帖子上有一个跟进问题。我想获取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规范中的某些内容?

提前致谢

3 个答案:

答案 0 :(得分:0)

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

我猜您要使用Array2D.iterArray2D.iteri来替换您的for循环。

答案 1 :(得分:0)

将每行(二维数组)转换为元组(在一维行中)的简单方法是完成开始 - 只是迭代所有行并构造一个元组:

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

为此,您需要(静态地)知道行的长度。这是因为F#元组是固定长度的元组并且检查长度。上面的示例假设只有3个元素具有索引012。如果长度是动态的,那么您可能应该继续使用2D数组而不是元组列表。

答案 2 :(得分:0)

另一种选择是完全绕过Excel引擎。有几种方法可以做到这一点,但我取得巨大成功的是'SpreadsheetGear'。它不是免费的(引入downvotes),但它非常接近地复制Excel API并且非常快。