在macOS上实现Microsoft Access与R集成的技术求助
问题
我正在开展一个项目,需要直接从Microsoft Access文件中提取数据。已在Windows系统上成功实现该功能,但在macOS系统中遇到问题(提示缺少合适的驱动)。我了解Access不支持macOS,但想询问是否存在无需打开Access文件即可直接提取数据的方法。
Windows系统成功代码
#install.packages("odbc") #install.packages("RODBC") #install.packages("tidyverse") library(odbc) library(RODBC) library(tidyverse) unique(odbc::odbcListDrivers()[[1]]) #查看计算机已安装的驱动 #[2] "Microsoft Access Driver (*.mdb, *.accdb)" 我们已安装该驱动 #指定数据库路径 db <- "C:\\Users\\Molly\\Desktop\\Obleo Docs\\Data\\NPRI_20230330.accdb" #使用RODBC函数连接数据库与R #我使用Access 2007版本对应的函数,因为我的Access是该版本 con <- RODBC::odbcConnectAccess2007(db) print(con) #从Access数据库中提取表 df_Company <- RODBC::sqlFetch(con,"Company",rownames= FALSE) #head(df_Company) #View(df_Company) #数据提取成功
macOS系统失败代码
library(odbc) library(RODBC) library(tidyverse) unique(odbc::odbcListDrivers()[[1]]) #查看计算机已安装的驱动 #在macOS上返回character(0),说明缺少正确的驱动
可行解决方案
方法1:使用mdbtools工具 + R包
macOS没有官方Access ODBC驱动,可借助开源的mdbtools实现数据提取:
- 通过Homebrew安装mdbtools:
brew install mdbtools - 在R中安装并调用第三方
mdbtools包:# 先安装devtools(若未安装) # install.packages("devtools") devtools::install_github("etiennebacher/mdbtools") library(mdbtools) # 指定Access文件路径 db_path <- "/Users/xxx/Desktop/NPRI_20230330.accdb" # 查看数据库内所有表 table_list <- mdb_list_tables(db_path) # 提取指定表数据 df_Company <- mdb_read(db_path, table_name = "Company")
方法2:转换为通用格式读取
无需打开Access,用第三方工具将.accdb/.mdb转成CSV或Excel格式后,再用R读取:
- 用LibreOffice Base:导入Access文件后,将目标表导出为CSV;
- 用离线转换工具:将Access文件转成CSV,再用
read_csv()读取。
方法3:Python中间层(备选)
允许的话,用Python辅助提取数据,再通过R调用:
- 安装Python依赖:
pip install mdbtools - 在R中调用Python代码:
# 安装reticulate(若未安装) # install.packages("reticulate") library(reticulate) # 编写Python读取逻辑 py_run_string(" import mdbtools as mdb db = mdb.Database('/Users/xxx/Desktop/NPRI_20230330.accdb') table = db.table('Company') df_Company = table.to_dataframe() ") # 将Python数据框转为R数据框 df_Company <- py$df_Company
内容的提问来源于stack exchange,提问作者Obleo Demandre
相关产品推荐
相关产品推荐

