F# 读取 XLS 文件 - 如何分析 Value2 对象

本文关键字:Value2 对象 读取 XLS 文件 | 更新日期: 2023-09-27 17:56:35

我尝试使用 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 中,vals 显示为

'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

谢谢

F# 读取 XLS 文件 - 如何分析 Value2 对象

Value2的类型是 obj 。如果范围仅表示单个单元格,则实际类型将是某种基元类型(整数、浮点数、十进制、字符串)。如果区域表示多个单元格(您的情况),则返回的值是类型为 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 中有一个数字)