在 R 中执行用 Excel 单元格编写的 SQL 查询

Posted

技术标签:

【中文标题】在 R 中执行用 Excel 单元格编写的 SQL 查询【英文标题】:Executing SQL queries written in Excel Cells in R 【发布时间】:2016-12-15 13:55:14 【问题描述】:

我正在 Excel 电子表格中编写 SQL 查询,并且我已使用 ODBC 将 Rstudio 与 SQL Server 链接起来。

现在,在 R 中使用 sqlQuery 命令,可以运行任何查询。 例如,

library(RODBC) 
mycon <- odbcConnect("mysqlSERVER") 
a1 <- sqlQuery(mycon,paste("SELECT TOP 10 * FROM USER"]

如果在 Excel 文件的特定单元格(或不同的单元格)中写入相同的查询(或多个查询),我如何获得输出?

编辑excel 文件将用作输入,一旦所有查询都写入 excel 文件,R 代码将运行。将只提供用户编辑 excel 文件。我如何连接所有这些过程?我只需要一个开始。我找到了 XLConnect 和 readNamedRegion() 函数,但仅此而已。

【问题讨论】:

【参考方案1】:

使用完全相同的包 RODBC,您实际上可以在 Excel 工作簿上运行 SQL 查询,甚至可以指定所需单元格的范围。

考虑连接到 Excel,将单元格中的 SQL 语句检索到数据框中,然后循环通过这样的 queriesdf 以作为对 SQL Server 提取的调用传递。

library(RODBC)

# EXCEL CONNECTION -----------------------------
xlconn <- odbcDriverConnect('Driver=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb);
                             DBQ=C:\\Path\\To\\ExcelWorkbook.xlsx')
# WHOLE WORKSHEET (FIRST ROW AS HEADERS)
queriesdf <- sqlQuery(xlconn, "SELECT * FROM [Sheet1$]")
# SPECIFIC RANGE (FIRST ROW AS HEADERS)
queriesdf <- sqlQuery(xlconn, "SELECT * FROM [Sheet1$A1:Z100]")
close(xlconn)

# SQL SERVER CONNECTION ------------------------
mssqlconn <- odbcConnect("MYSQLSERVER")     
# LIST OF DATA FRAMES
dfList <- lapply(queriesdf$QueryCol, function(q) sqlQuery(mssqlconn, q))
close(mssqlconn)

【讨论】:

这个答案对您有帮助吗?任何问题?如果有帮助,请接受(在旁边打勾)以确认解决方案。

以上是关于在 R 中执行用 Excel 单元格编写的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

Excel表中连接sql并使用sql语句引用excel单元格数据作为查询条件

数据库中的文字导入到excel中如何实现自动换行?

Excel VBA:用相邻的单元格值填充空单元格

Excel 用户定义函数未在单元格更新时调用

单元格中的 Excel VBA 换行会减慢合并任务的执行速度

用python解决Excel 表中某个范围内的单元格