如何用R程序读取或下载公开的Office365 XLSX文件?
解决OneDrive公开预览链接无法在R中下载/读取XLSX的问题
你遇到的问题根源是使用的OneDrive网页预览链接,而非文件的直接下载地址,因此readxl::read_excel无法识别,download.file仅能下载预览页面的HTML内容。以下是可行的解决方案:
核心操作:转换为直接下载链接
将原链接中的view替换为download,即可得到文件的直接下载地址:
原链接:https://onedrive.live.com/view?id=3B8590FB83D36ADC!550&resid=3B8590FB83D36ADC!550&authkey=!ACKE9hDQI06CKgw&wdo=2&cid=3b8590fb83d36adc
修改后:https://onedrive.live.com/download?id=3B8590FB83D36ADC!550&resid=3B8590FB83D36ADC!550&authkey=!ACKE9hDQI06CKgw&wdo=2&cid=3b8590fb83d36adc
方法1:直接读取到R环境
使用修改后的下载链接,结合readxl直接读取(若直接读取失败,可通过临时文件中转):
直接读取(推荐)
library(readxl) # 使用修改后的下载链接 df <- read_excel("https://onedrive.live.com/download?id=3B8590FB83D36ADC!550&resid=3B8590FB83D36ADC!550&authkey=!ACKE9hDQI06CKgw&wdo=2&cid=3b8590fb83d36adc")
临时文件中转(若直接读取报错)
library(readxl) # 创建临时XLSX文件 temp_xlsx <- tempfile(fileext = ".xlsx") # 下载文件(必须指定mode="wb",保证二进制文件完整性) download.file("https://onedrive.live.com/download?id=3B8590FB83D36ADC!550&resid=3B8590FB83D36ADC!550&authkey=!ACKE9hDQI06CKgw&wdo=2&cid=3b8590fb83d36adc", destfile = temp_xlsx, mode = "wb") # 读取数据 df <- read_excel(temp_xlsx) # 可选:清理临时文件 file.remove(temp_xlsx)
方法2:下载到本地指定路径
同样使用修改后的下载链接,加上mode="wb"参数(XLSX为二进制文件,必须设置此参数避免文件损坏):
download.file("https://onedrive.live.com/download?id=3B8590FB83D36ADC!550&resid=3B8590FB83D36ADC!550&authkey=!ACKE9hDQI06CKgw&wdo=2&cid=3b8590fb83d36adc", destfile = "~/downloads/test.xlsx", mode = "wb")
内容的提问来源于stack exchange,提问作者John J.
相关产品推荐
相关产品推荐

