F#Excel UsedRange没有属性或方法

这是在F#上开始讨论的延续。UsedRange未定义 ,已经通过将ActiveSheet对象向下转换为Worksheet解决。 然而,在这样做的时候,我又遇到了一个新问题:UsedRange没有提供标准对象方法以外的属性或方法。

我的解决scheme引用了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, eg Equals, GetEnumerator, etc. 

我可以使用范围没有问题:

 xl.Range("A1").EntireColumn.Insert() |> ignore 

UsedRange被认为是一个范围。 向下转换到范围,Visual Studio警告我:“这种typestesting或向下转换将始终保持”。

范围工程。 UsedRange被认为是Range。 因此,UsedRange应该工作。 但事实并非如此。 我留下了矛盾。

Visual Studio 2010 Premium,F#2.0。

我感谢提供的任何见解。 谢谢。

你确定你的F#项目引用了所有必要的互操作程序集的正确版本吗? 我只是在F#脚本文件中尝试了你的代码,并且在添加下面几行UsedRange之后可以看到UsedRange成员:

 #r "office.dll" #r "Microsoft.Office.Interop.Excel.dll" 

我可以看到诸如EntireColumnSort类的EntireColumn ,并且它只是抱怨代码段中的一行试图在string和整数上使用+

 xl.Range("A2").AutoFill(xl.Range("A2:A" + (string ws.UsedRange.Rows.Count)), XlAutoFillType.xlFillSeries) |> ignore 

我试图在Visual Studio 2010中作为脚本文件,也在一个新的项目(添加两个引用后,似乎工作正常)。 我添加了在Visual Studio安装目录中的“Visual Studio Tools for Office \ PIA”下安装的dll引用。