DescTools :: XLGetRange()失败,并出现sel $ Cells()错误:尝试应用非功能

时间:2018-07-04 07:36:11

标签: r excel rdcomclient desctools

我正在运行R版本3.5.0

我已经安装了软件包:

install.packages("DescTools")
install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")

我已经运行Excel并选择了一个值范围。

然后我在RStudio中运行以下代码:

library(DescTools)
BMI <- XLGetRange(header=TRUE)

我收到此错误消息:

Loading required namespace: RDCOMClient
Error in sel$Cells() : attempt to apply non-function

当我运行此代码时:

BMI <- XLGetRange(file="C:/Users/path/Excel to R.xlsx", sheet = "Sheet1", range="A1:B21")

它工作正常。

从Excel导入数据时,您在运行的Excel应用程序中选择一个范围时出错。

在解决此问题方面将提供帮助。

3 个答案:

答案 0 :(得分:0)

您可能忘记了调用库函数或在Excel工作表中选择范围

在excel文件的sheet1中选择范围A1:B21,然后运行以下代码:

install.packages("DescTools")
install.packages("RDCOMClient")

library(DescTools)
library(RDCOMClient)

BMI <- XLGetRange(header=TRUE)

答案 1 :(得分:0)

我检查了XLGetRange()的源代码

<?Php $_POST["type"]; ?>

xl <-GetCurrXL()返回

......
if(is.null(file)){
    xl <- GetCurrXL()
    ws <- xl$ActiveSheet()
    if(is.null(range)) {
      # if there is a selection in XL then use it, if only one cell selected use currentregion
      sel <- xl$Selection()
      if(sel$Cells()$Count() == 1 ){
        range <- xl$ActiveCell()$CurrentRegion()$Address(FALSE, FALSE)
      }
.....

xl $ ActiveSheet()返回NULL xl $ Selection()返回NULL

当我终止Excel应用程序时。

xl <-GetCurrXL()仍然返回

An object of class "COMIDispatch"
Slot "ref":
<pointer: 0x000000000011b688>

我决定重新启动笔记本电脑并启动RStudio。

现在它可以正常工作了

An object of class "COMIDispatch"
Slot "ref":
<pointer: 0x000000000011b688>

BMI返回Excel中选定的单元格范围。

答案 2 :(得分:0)

当excel实例在后台不可见时,会发生此错误。函数GetNewXL试图获取新实例的句柄,但由于某种原因无法正确获取它。 如果看到此错误,请关闭所有正在运行的Excel任务,然后运行DescTools :: XLKill(),这将终止所有在无形中运行的Excel实例。