这是在F# Excel UsedRange is not Defined上开始的讨论的延续,该问题已通过将 ActiveSheet 对象向下转换为工作表来解决。然而,在这样做时,我遇到了一个新问题:UsedRange 除了标准对象方法之外没有公开任何属性或方法。
我的解决方案引用了 Microsoft.Office.Interop.Excel 和 Microsoft.Office.Tools.Excel.v4.0.Utilities。
open Microsoft.Office.Interop.Excel
open Microsoft.Office.Tools.Excel
let xl = ApplicationClass()
xl.Workbooks.OpenText(fileName)
let wb = xl.Workbooks.Item(1)
let ws = wb.ActiveSheet :?> Worksheet
ws.UsedRange.EntireColumn.AutoFit()
// "The field, constructor or member 'EntireColumn' is not defined".
ws.UsedRange.Sort(xl.Range(sortKey1), XlSortOrder.xlAscending)
// "The field, constructor or member 'Sort' is not defined".
xl.Range("A2").Value <- 1
xl.Range("A2").AutoFill(xl.Range("A2:A" + ws.UsedRange.Rows.Count),
XlAutoFillType.xlFillSeries) |> ignore
// "The field, constructor or member 'Rows' is not defined".
ws.UsedRange.
// Intellisense shows only default object members, e.g. Equals, GetEnumerator, etc.
我可以毫无问题地使用 Range:
xl.Range("A1").EntireColumn.Insert() |> ignore
UsedRange 被识别为 Range。向下转换为 Range,Visual Studio 警告我:“这种类型的测试或向下转换将始终保持”。
范围有效。UsedRange 被识别为 Range。因此,UsedRange 应该可以工作。但事实并非如此。我很矛盾。
Visual Studio 2010 高级版,F# 2.0。
我感谢提供的任何见解。谢谢。