Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#将Excel文件解析为元组数组_Excel_F# - Fatal编程技术网

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

F#将Excel文件解析为元组数组,excel,f#,Excel,F#,我在邮件中有一个后续问题。我想将Excel电子表格的内容放入一个元组数组中,每个元组对应于电子表格中的每一行 我从循环整个范围开始,如下所示: let path = "XXX.xlsx" let app = ApplicationClass(Visible = false) let book = app.Workbooks.Open path let sheet = book.Worksheets.[1] :?> _Worksheet

我在邮件中有一个后续问题。我想将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规范中有现成的东西我可以使用


提前感谢模块实现了2D阵列的一些常见功能


我猜您希望使用
Array2D.iter
Array2D.iteri
来替换for循环。

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

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

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

另一个选项是完全绕过Excel引擎。有几种方法可以做到这一点,但我最成功的方法是“电子表格”。它不是免费的(带来向下投票),但它非常接近地复制Excel API,而且速度非常快。

如何从每行的值中创建元组?