首页 > 解决方案 > 错误:呼叫被被呼叫者拒绝。COMStop() - 读取 excel 密码保护文件 - 使用 R - xl.read.file() 函数

问题描述

我正在使用该功能pblapply (FileNames, ProcessFile)

我的ProcessFile对象派生自使用 xl.read.file ()(来自excel.link包)的函数

insidepblapply xl.read.file ()读取文件夹中的几个 excel 文件(我的输入是所有文件路径的列表 - FileNames),所有文件都受密码保护。

读取这些文件后,该函数会进行简单的修改并将所有数据编译到一个羽毛文件中以供将来分析。

我的问题是处理被中断并且正在读取的文件自行打开,我必须手动输入密码,有时在输入密码后处理继续(excel文件自行关闭)和其他时间稍后添加被中断(excel文件保持打开状态-excel询问我是否要编辑)。

错误是:

错误:呼叫被被呼叫者拒绝。

调用方:COMStop(“调用被被调用者拒绝。”,-2147418111L)

浏览 [1]>

我需要自动处理。无需干预过程。有人能帮我吗?

代码是:

ProcessFile <- function(FileFullPath){

从文件中读取数据库工作表

  DataBase <- xl.read.file(filename = FileFullPath,
                           xl.sheet = "Database",                    
                           password = "xxx", 
                           write.res.password="xxx")                                                          

简单的修改

  RenameCols <- data.frame(original = names(DataBase), 
                           original_unique = make.unique(names(DataBase))) %>% 
    mutate(visits = if_else(original == "NA", "VISITA_", NA_character_),
           visits_nbr = str_split_fixed(original_unique, "\\.", 2)[,2],
           visits_nbr = as.numeric(visits_nbr),
           visits_nbr = if_else(is.na(visits_nbr), 1, visits_nbr + 1),
           renamed = if_else(original == "NA", paste0(visits, visits_nbr), original))


  names(DataBase) <- RenameCols$renamed

  rm(RenameCols)

从文件中读取参考工作表并进行简单修改

  RefData <- xl.read.file(filename = FileFullPath,
                          xl.sheet = "Ref", 
                          header = FALSE, 
                          password = "xxx", 
                          write.res.password="xxx") %>% 
    t %>% 
    as.data.frame %>% 
    setnames(c("1", "2", "3", "4", "5"),
             c("TOOL_VERSION", "COMPUTER_NAME", "USER_NAME", "EXPORT_TIMESTAMP", "ORIGINAL_FILENAME"))

数据准备

  DataBase %<>% 
    mutate(TOOL_VERSION = RefData$TOOL_VERSION[1], 
           COMPUTER_NAME = RefData$COMPUTER_NAME[1], 
           USER_NAME = RefData$USER_NAME[1], 
           EXPORT_TIMESTAMP = RefData$EXPORT_TIMESTAMP[1], 
           ORIGINAL_FILENAME = RefData$ORIGINAL_FILENAME[1]) %>% 
    select(TOOL_VERSION, COMPUTER_NAME, USER_NAME, EXPORT_TIMESTAMP, ORIGINAL_FILENAME, everything())

  rm(RefData)
  invisible(gc())

  return(DataBase)
}

标签: rexcel

解决方案


推荐阅读