f#读取xls文件 – 如何parsing一个value2对象
我试图用F#读取一个xls文件,如下所示
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
问题是我怎样才能将val分析成F#types? 在fsx.exe中,vals显示为
'val vals: obj = [bound1 bound2 ["colname1"; "colname2"; ...] [1234,5678,]...]
我想首先检索string表示,但是printfn "%A" vals.ToString();;
仅显示"System.Object[,]"
。 如果我然后尝试访问vals.[1,1]
,我得到错误The field,constructor or member 'item' is not defined
谢谢,
Value2
的types是obj
。 如果范围只代表一个单元格,实际的types将是一些原始types(int,float,decimal,string)。 如果范围表示几个单元格(您的情况),那么返回的值是一个二维的types为obj[,]
.NET数组。
您可以将Value2
返回的值转换为数组并使用索引器访问它:
let vals = sheet.UsedRange.Value2 :?> obj[,] vals.[1, 1]
请注意,返回的数组是基于1的(而不是像往常一样基于零)。 索引器再次返回obj
,所以你需要将这些值转换为它们的实际types。 根据您的工作表,这可能是浮动或string:
let firstTitle = vals.[1, 1] :?> string let firstValue = vals.[2, 1] :?> float
(假设你在A1中有一个标题,在A2中有一个数字)