f#读取xls文件 - 如何解析value2对象

时间:2011-05-17 13:29:21

标签: c# .net excel f#

我尝试使用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#类型?在fsx.exe中,val显示为

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

我想首先检索字符串表示,但是 printfn "%A" vals.ToString();;仅显示"System.Object[,]"。如果我尝试访问vals.[1,1],则会收到错误The field,constructor or member 'item' is not defined

感谢,

1 个答案:

答案 0 :(得分:3)

Value2的类型为obj。如果范围仅表示单个单元格,则实际类型将是某种基本类型(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中有一个数字)