F#将Excel文件解析为元组数组
我在邮件中有一个后续问题。我想将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
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,而且速度非常快。如何从每行的值中创建元组?