如何从googlesheets4中的range_read_cells()读取超链接

问题描述 投票:0回答:1

我需要从 Google 表格中的超链接(如果适用)读取 URL,以便在我的分析的其他部分中使用。我正在使用

read_sheet()
range_read()
读取数据,但这只提供了单元格的值(可见的内容 - 没有公式或网址)。我转向
range_read_cells()
并取得了一些成功,但现在我陷入了困境。考虑以下几点:

library(googledrive)
library(googlesheets4)
library(dplyr)

df_test <- read_sheet("https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0")

View(df_test) # no urls - text only

df_test2 <- range_read_cells(ss = "https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0",
                             sheet = "Sheet1", 
                             range = "A1:C5", 
                             cell_data = "full")

View(df_test2) # urls are in a deep within a list called 'cell'

x <-unlist(df_test2$cell)
x["hyperlink"]

x["hyperlink"]
调用可以让我访问 URL,但只能访问第一个:

> x["hyperlink"]
                hyperlink 
"https://www.google.com/" 

如何将其应用到整张纸上?我需要从工作表中读取每个网址并将其写入一个新列。请注意,并非所有行都有 url,但我假设我可以有条件地处理这种情况。

我在 https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0 分享了包含示例数据的 Google 表格。它是公开的,所以你应该能够看到它。

提前致谢!

googlesheets4
1个回答
1
投票

我今天正试图解决这个问题。我编写了以下函数,它可以与

purrr::map_df
结合使用来完成您想要做的事情:

library(googlesheets4)
library(dplyr)
library(purrr)
library(stringr)

extract_hyperlink_data <- function(cell) {
  cell_unlisted <- unlist(cell)
  list(
    text = cell_unlisted[["formattedValue"]],
    hyperlink = if ("hyperlink" %in% names(cell_unlisted)) cell_unlisted[["hyperlink"]] else NA
  )
}

df_test <- read_sheet("https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0")

df_test2 <- range_read_cells(ss = "https://docs.google.com/spreadsheets/d/1oLj5YyBG2-ucvhhMUrl2K0Ko8jJkX4uvDChVfSfxT0o/edit#gid=0",
                             sheet = "Sheet1", 
                             range = "A1:C5", 
                             cell_data = "full")
URL_data <- df_test2 %>%
  filter(stringr::str_starts(loc, "C") & loc != "C1") %>%
  pull(cell) %>%
  purrr::map_df(., extract_hyperlink_data) %>%
  rename(Website = text, Website_URL = hyperlink)

df_test %>%
  left_join(URL_data) %>%
  View

希望这有帮助 - 如果您需要排除故障,请告诉我。您可能可以构建一个自定义解析器来与此结合使用,这样您就不需要在开始之前知道哪些列具有超链接,但我还没有这样做。

© www.soinside.com 2019 - 2024. All rights reserved.