2011-05-17 15 views
6

我嘗試使用F#讀取xls文件如下F#讀取xls文件 - 如何解析值2物體

​​

的問題是我怎麼能解析丘壑爲F#類型?在fsx.exe的丘壑表現爲

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

我想先檢索串represetation,但 printfn "%A" vals.ToString();;顯示"System.Object[,]"只。如果我再嘗試訪問vals.[1,1],我得到了錯誤The field,constructor or member 'item' is not defined

感謝,

回答

3

類型的Value2obj。如果範圍僅表示單個單元格,則實際類型將是某種基本類型(int,float,decimal,string)。如果範圍代表幾個單元格(您的情況),則返回的值是一個類型爲obj[,]的二維.NET數組。

可以通過投Value2返回到數組中的值,並使用索引訪問它:

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

注意,返回陣列爲基礎的1(而不是基於零照常)。索引器再次返回obj,所以您需要將值轉換爲其實際類型。根據您的工作表,這很可能是浮動或字符串:

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

(假設你已經在A1標題和A2的數字)

+0

感謝我能使用指數切片中的obj [,]喜歡瓦爾斯[1,1 ..] – matlabdbuser 2011-05-17 14:05:17

+0

@matlabdbuser:是的,我認爲這應該起作用(因爲你只使用普通的.NET數組)。如果你得到一個只包含數字的子範圍,你也可以將它轉換爲浮點數的二維數組,即'Array2D.map float vals'。 – 2011-05-17 14:15:06