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