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

时间:2016-12-15 13:55:14

标签: sql r excel odbc rodbc

我在Excel电子表格中编写SQL查询,并且已使用ODBC将Rstudio与SQL服务器相关联。

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

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

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

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

1 个答案:

答案 0 :(得分: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)