bugfix> r > 投稿

ハイパーリンクが指す実際のアドレスとは完全に異なるテキストとして表されるハイパーリンクが一部の列に含まれるExcelシートで作業しています。いくつかのRコードを使用して、Excelシートを変更およびサブセットしますが、ハイパーリンクは保持したいと思います。これらのハイパーリンクをインデックス付き文字ベクトルとして抽出し、 makeHyperlinkString() を使用して新しいExcelドキュメントに再導入することでこれを行うことができると思いますおよび writeFormula() 関数。しかし、リンク自体のベクトルを取得する方法はわかりません。

重要な場合、私の意図は、ワークブックオブジェクトではなく、Excelシートのdata.frameバージョンですべての変更とサブセット化を行うことです。

回答 1 件
  • ああ、今私はあなたの問題を得たと思う。 Excel-Hyperlinksではなく、通常のハイパーリンクだけがあると思いました。

    これは少し面倒ですが、ハイパーリンクのベクトルを取得するのに役立つと思います。

    library(openxlsx)
    pathtofile =  "path to .xlsx file"
    df1 <- read.xlsx(xlsxFile = pathtofile, 
                     sheet = 1, skipEmptyRows = FALSE, 
                     colNames = F, rowNames = F,
                    startRow = 1)
    ## Sheet or Tabelle
    Sheet = "Sheet" ## Or "Tabelle"
    ## Get Names of rows from Hyperlink column
    rowIndex <- sub(x = df1[,1], pattern = paste0("(#'",Sheet,"\\d'!)"), replacement = "")
    ## Get the Sheet, where Hyperlinks are saved
    SheetName <- regmatches(df1[,1], regexpr(text = df1[,1], pattern = paste0("(",Sheet,"\\d)")))
    ## Extract only the Sheet number
    SheetIndex <- as.numeric(sub(x = SheetName, pattern = Sheet, replacement = ""))
    ## Get the row Indexes as numeric
    RowIndexNum <- as.numeric(regmatches(rowIndex, regexpr(text = rowIndex, pattern = "\\d")))
    ## Get the column name as character
    RowIndexName <- sub(x = rowIndex, pattern = "\\d", "")
    ## Create uppercase Letters
    myLetters <- toupper(letters[1:26])
    ## Convert Row Name (character) to numeric (based on alphabetical order)
    RowIndexNameNum <- match(RowIndexName, myLetters)
    ## If Hyperlinks only in 1 Sheet or several sheets
    if (length(unique(SheetIndex)) == 1) {
      dfLinks <- read.xlsx(xlsxFile = pathtofile,
                           sheet = unique(SheetIndex), 
                           skipEmptyRows = FALSE, 
                           colNames = F, rowNames = F, 
                           rows = RowIndexNum[1]:tail(RowIndexNum,1),
                           cols = unique(RowIndexNameNum),
                           startRow = 1
                           );
    } else {
      dfLinks <- data.frame()
      for (i in unique(SheetIndex)){
        dfTmp <- read.xlsx(xlsxFile = pathtofile,
                  sheet = i, 
                  skipEmptyRows = FALSE, 
                  colNames = F, rowNames = F, 
                  rows = RowIndexNum[1]:tail(RowIndexNum,1),
                  cols = unique(RowIndexNameNum),
                  startRow = 1)
        dfLinks <- rbind(dfLinks, dfTmp)
      }
    }
    dfLinks
    
    

    これは私のExcelファイルのようです:

あなたの答え