You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从共享OneDrive链接将xlsx文件导入R并回传至OneDrive

问题原因

你使用的OneDrive共享链接是网页预览链接,而非直接指向文件资源的下载链接,因此curl_download实际下载的是网页HTML内容,不是真实的xlsx文件,导致readxl无法识别解析。

可行解决方案

方案1:修改共享链接为直接下载格式

OneDrive个人版的共享链接可通过简单修改转换为直接下载链接:

  • 将原链接中类似 /:x:/g/ 的片段替换为 /:u:/
  • 在链接末尾添加参数 &download=1

修改后的链接示例(基于你提供的原链接):

https://onedrive.live.com/:u:/g/personal/D7F26BE16D487B10/EYJxLYphlkRFogUmL7LhO4QBEym63JCSoZVQXXgeXG6ptA?resid=D7F26BE16D487B10!s8a2d718296614544a205262fb2e13b84&ithint=file%2Cxlsx&e=Oj2gQq&migratedtospo=true&redeem=aHR0cHM6Ly8xZHJ2Lm1zL3gvYy9kN2YyNmJlMTZkNDg3YjEwL0VZSnhMWXBobGtSRm9nVW1MN0xoTzRRQkV5bTYzSkNTb1pWUVhYZ2VYRzZwdEE_ZT1PajJnUXE&download=1

使用修改后的链接重新运行代码:

library(curl)
library(readxl)

# 替换为修改后的直接下载链接
url <- "https://onedrive.live.com/:u:/g/personal/D7F26BE16D487B10/EYJxLYphlkRFogUmL7LhO4QBEym63JCSoZVQXXgeXG6ptA?resid=D7F26BE16D487B10!s8a2d718296614544a205262fb2e13b84&ithint=file%2Cxlsx&e=Oj2gQq&migratedtospo=true&redeem=aHR0cHM6Ly8xZHJ2Lm1zL3gvYy9kN2YyNmJlMTZkNDg3YjEwL0VZSnhMWXBobGtSRm9nVW1MN0xoTzRRQkV5bTYzSkNTb1pWUVhYZ2VYRzZwdEE_ZT1PajJnUXE&download=1"

temp_file <- tempfile(fileext = ".xlsx")
curl_download(url, temp_file)

data <- read_excel(temp_file)
head(data)

方案2:使用onedrive R包直接操作(推荐)

该包可直接连接OneDrive,无需手动处理链接,支持一键下载/上传:

  1. 安装并加载包:
install.packages("onedrive")
library(onedrive)
  1. 授权登录(首次运行会弹出网页授权窗口,用你的账号登录即可):
od_auth()
  1. 下载目标文件:
temp_file <- tempfile(fileext = ".xlsx")
# 替换为文件在OneDrive中的相对路径,或使用文件ID
od_download(path = "目标文件夹/你的文件.xlsx", dest = temp_file)
data <- read_excel(temp_file)
  1. 处理数据后上传回OneDrive:
# 导出处理后的数据
write_excel_csv(data, "processed_data.xlsx")
# 上传到OneDrive指定路径
od_upload("processed_data.xlsx", path = "目标文件夹/processed_data.xlsx")

方案3:通过Microsoft Graph API手动调用

适合需要更灵活控制的场景:

  1. 在Azure AD注册应用,获取客户端ID和客户端密钥
  2. 获取访问令牌:
library(httr)

token_url <- "https://login.microsoftonline.com/common/oauth2/v2.0/token"
response <- POST(token_url,
                 body = list(
                   client_id = "你的客户端ID",
                   client_secret = "你的客户端密钥",
                   grant_type = "client_credentials",
                   scope = "https://graph.microsoft.com/.default"
                 ),
                 encode = "form")
token <- content(response)$access_token
  1. 下载文件(需先通过Graph API查询文件的Drive ID和Item ID):
temp_file <- tempfile(fileext = ".xlsx")
download_url <- "https://graph.microsoft.com/v1.0/drives/{你的Drive ID}/items/{你的文件Item ID}/content"
GET(download_url, add_headers(Authorization = paste("Bearer", token)), write_disk(temp_file, overwrite = TRUE))
data <- read_excel(temp_file)
  1. 上传处理后的文件:
write_excel_csv(data, "processed_data.xlsx")
upload_url <- "https://graph.microsoft.com/v1.0/drives/{你的Drive ID}/items/{目标文件夹Item ID}:/processed_data.xlsx:/content"
PUT(upload_url,
    add_headers(Authorization = paste("Bearer", token)),
    body = upload_file("processed_data.xlsx"))

内容的提问来源于stack exchange,提问作者gerard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:35:19