これは、F#Excelで開始された議論の続きです。UsedRangeis 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へのダウンキャストでは、VisualStudioは次のように警告します。「このタイプのテストまたはダウンキャストは常に保持されます」。
範囲は動作します。UsedRangeはRangeとして認識されます。したがって、UsedRangeは機能するはずです。しかし、そうではありません。矛盾が残っています。
Visual Studio 2010 Premium、F#2.0。
提供された洞察に感謝します。ありがとう。