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中有一个数字)