【问题标题】:Possible to write Excel formulas or data validation using R?可以使用 R 编写 Excel 公式或数据验证吗?
【发布时间】:2015-04-27 14:17:01
【问题描述】:

我正在尝试将 R 数据框写入 Excel,并希望添加具有 Excel 公式和/或数据验证值的其他单元格/列(例如,使用 Excel 中的数据/验证菜单提供允许的下拉列表单元格的值)

我查看了 R 包:xlsx、XLConnect 和 openxlsx。这些非常适合编写单元格,但不适用于公式数据验证设置

我目前认为我必须使用 AppleScript(在 Mac 上)或 VBA 解决方案对 xlsx 文件进行后处理。如果可能的话,我想在 R 中完成这一切,这样逻辑就不必跨程序拆分。

在两者中:为单元格编写数据验证设置(与编写 Excel 公式相比)更为重要。用例是将 R 数据框写入 Excel,并包含用于更正的空列。对于空列,我想要该列的可接受值(例如“是”/“否”)的下拉列表。

提前致谢。

【问题讨论】:

  • 我认为期望 R 包提供 VBA 的所有功能的期望太高了。
  • 我不是要求 R 取代 VBA - 只是想知道这种能力是否存在,或者人们是否有兴趣看到这样的东西被开发出来。特别是数据验证用例对于获取 R 数据帧并将其导出到对非 R 用户更友好的环境中非常有帮助。
  • 我们大多数铁杆 R 用户认为 Excel 不太“用户友好”。
  • @BondedDust - 感谢您对 R 和 Excel 的看法!非常感激。其他人有任何与提出的问题相关的信息吗?
  • 我认为你提到的包只读取excel数据。有关其他方式(通过 VBA),请参阅 thertrader.com/2014/02/11/a-million-ways-to-connect-r-and-excel

标签: r xlsx xlconnect openxlsx


【解决方案1】:

以下示例显示了如何将下拉列表添加到 Excel 单元格。

# Libraries
library(openxlsx)

# Create workbook
wb = createWorkbook()

# Add worksheet "Customers" to the workbook
addWorksheet(wb, "Customers")

# Create Customers dataframe
customers_df = data.frame("Name" = c("Alex", "Kate", "Mary"), "Gender" = 
c("male", "female", "female"))

# Add Customers dataframe to the sheet "Customers"
writeData(wb, sheet = "Customers", x = customers_df, startCol = 1)

# Add worksheet "Drop-down values" to the workbook
addWorksheet(wb, "Drop-down values")

# Create drop-down values dataframe
gender_values_df = data.frame("Gender" = c("male", "female"))

# Add drop-down values dataframe to the sheet "Drop-down values"
writeData(wb, sheet = "Drop-down values", x = gender_values_df, startCol = 
1)

# Add drop-downs to the column Gender on the worksheet "Customers"
dataValidation(wb, "Customers", col = 2, rows = 2:4, type = "list", value = 
"'Drop-down values'!$A$2:$A$3")

# Save workbook
saveWorkbook(wb, "D:/Customers.xlsx", overwrite = TRUE)

更多信息可以在这里找到:dataValidation

【讨论】:

  • 感谢您提供可重现的示例。确认它有效并将此解决方案标记为回答原始问题。
  • 是否可以在某处的 Excel 工作表中使用未预定义的列表值?如dataValidation(wb, "Customers", col = 2, rows = 2:4, type = "list", value = c("Yes", "No"))
  • 但是如何将 dataValidation 包添加到 Angular??
【解决方案2】:

作为在 R 和 Excel 之间来回走动的人,我建议您让 Excel 在这种情况下驱动工作流程。要么编写 Excel 宏以从 R 创建的文件中导入数据,要么使用 RExcel(Excel 插件),它允许从 Excel 对 R 会话进行交互式控制。

【讨论】:

  • 好建议。我在 AWS linux 机器上运行 R 脚本,并希望避免在 Windows PC 上使用 Excel 进行后处理。感谢您在 Excel 中使用 RExcel 运行 R 会话的提示 - 将看看这一点。也许我可以执行一个脚本,从保存的图像(RData 文件)中加载我需要的数据框,然后在 Excel 中创建我需要的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多