【问题标题】:R: Load Excel Workbook If it Exists or Create itR:加载 Excel 工作簿(如果存在或创建它)
【发布时间】:2019-01-09 21:00:27
【问题描述】:

我的代码中有一个预定义的filename。如果文件存在,我希望加载该文件,如果不存在,我希望创建一个新工作簿。我正在尝试使用tryCatch 和包openxlsx 使用以下代码来执行此操作:

tryCatch({wb <- loadWorkbook(fileName)}, error=function(e){wb <- createWorkbook()})
*some processing*
saveWorkbook(wb, fileName, overwrite = TRUE)

我的 tryCatch 似乎没有运行任何一个命令。当我单独运行 loadWorkbook 时,它会引发错误“文件不存在”,但是当我运行 tryCatch 时,它不会创建新的工作簿。我是否以错误的方式使用 tryCatch?

【问题讨论】:

    标签: r excel error-handling try-catch openxlsx


    【解决方案1】:

    我相信 TryCath 是正确的,但在保存工作簿之前,您至少需要创建一张工作表。试试这个:

    wb <- tryCatch(loadWorkbook(fileName), 
                   error = function(e){wb <- createWorkbook(); createSheet(wb, sheetName="Sheet1"); wb})
    

    【讨论】:

    • processing部分有一个命令来创建一张sheet。正是这个命令在运行 tryCatch 后抛出了一个错误,说 wb 不存在
    • 然后wb &lt;- tryCatch(loadWorkbook(fileName), error=function(e){createWorkbook()}) 应该可以工作,在我的电脑上它可以正常工作。您必须返回 wb 并在 TryCath 之外创建对象。
    【解决方案2】:

    发现问题。
    由于错误部分是一个函数,因此 wb 是在函数中本地创建的。我只需要按照 Juan 的建议通过在 tryCatch 之外分配它来从函数中返回 wb。

    wb <- tryCatch({loadWorkbook(fileName)}, error=function(e){createWorkbook()})
    *some processing*
    saveWorkbook(wb, fileName, overwrite = TRUE)
    

    【讨论】:

    • 这不起作用,您必须像我的示例一样在 TryCath 之外分配 WorkBook。
    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多