F#读取XLS文件 - 如何分析一个值2对象 [英] f# read xls file - how to parse a value2 object

查看:122
本文介绍了F#读取XLS文件 - 如何分析一个值2对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用F#读取xls文件如下

 开放的Microsoft.Office.Interop.Excel
让应用程序= ApplicationClass(可见= FALSE)
让书= app.Workbooks.OpenTEST.XLS
让片= book.Worksheets [1]:>。? _Worksheet
让瓦尔斯= sheet.UsedRange.Value2
 

现在的问题是我怎么能解析丘壑成F#类型?在fsx.exe中,丘壑表现为

 VAL瓦尔斯:OBJ = [bound1
                  bound2
                  [colname1; colname2; ...]
                  [1234,5678,] ...]
 

我想首先检索该字符串重新presetation,但 printfn%Avals.ToString();; 节目System.Object的[,]只。如果我再尝试访问丘壑。[1,1] ,我得到了错误字段,构造或成员项没有定义

感谢

解决方案

值2 的类型是 OBJ 。如果范围再presents只是一个单细胞,实际的类型也会有一些基本类型(整数,浮点,十进制,字符串)。如果范围再presents几个小区(你的情况),则返回值的类型的二维数组.NET的obj [,]

您可以投值2 将其使用索引数组和访问返回的值:

 让瓦尔斯= sheet.UsedRange.Value2:>? OBJ [,]
瓦尔斯[1,1]
 

请注意,返回的数组是从1开始的(而不是基于零像往常一样)。索引器再次返回 OBJ ,所以你需要转换值,以自己的实际类型。根据您的工作表,这很可能是浮动或字符串:

<?pre> 让firstTitle =丘壑[1,1]:&GT;串 让firstValue =丘壑[2,1]。?&GT;浮动

(假设你已经在A1中一个标题和一个数字A2)

I tried to use F# read a xls file as below

open Microsoft.Office.Interop.Excel
let app = ApplicationClass(Visible = false)
let book = app.Workbooks.Open "test.xls"
let sheet = book.Worksheets.[1] :?> _Worksheet
let vals = sheet.UsedRange.Value2

The problem is how can I parse vals into a F# type? in fsx.exe, the vals showed as

'val vals: obj = [bound1
                  bound2
                  ["colname1"; "colname2"; ...]
                  [1234,5678,]...]

I wanted to retrieve the string represetation first, but printfn "%A" vals.ToString();; shows "System.Object[,]" only. If I then try to access vals.[1,1], I got error The field,constructor or member 'item' is not defined

thanks,

解决方案

The type of Value2 is obj. If the range represents just a single cell, the actual type will be some primitive type (int, float, decimal, string). If the range represents several cells (your case), then the returned value is a two-dimensional .NET array of type obj[,].

You can cast the value returned by Value2 to an array and access it using indexers:

let vals = sheet.UsedRange.Value2 :?> obj[,]
vals.[1, 1]

Note that the returned array is 1-based (and not zero based as usual). The indexer again returns obj, so you need to cast the values to their actual type. Depending on your sheet, this will be probably float or string:

let firstTitle = vals.[1, 1] :?> string
let firstValue = vals.[2, 1] :?> float

(Assuming you have a title in A1 and a number in A2)

这篇关于F#读取XLS文件 - 如何分析一个值2对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆