Как читать Excel в R с помощью текстового поля - PullRequest
0 голосов
/ 28 января 2020

У меня есть файл Excel, который содержит некоторые данные в текстовом поле. Цель состоит в том, чтобы прочитать файл без изменений с номером строки. Я не хочу читать то, что находится внутри текстового поля. Когда я читаю файл, используя readxl и openxlsx , все строки с текстовым полем пропускаются.

Например, на прилагаемом изображении, когда я читаю файла, кадр данных содержит только строки с 9 по 14. Строка 9 в Excel - это строка 1 в кадре данных. Есть ли способ, которым я могу прочитать файл, чтобы мой фрейм данных также имел 14 строк. Не имеет значения, содержат ли первые 8 строк какое-либо значение или нет. enter image description here

testEmptyRow1 <- openxlsx::read.xlsx(filtered_list[1], skipEmptyRows=FALSE)# not working

Редактировать 1- ссылку на файл Smaple

R читает файл как - enter image description here

Редактировать 2 Я не хочу читать содержимое из текстовых полей. Цель состоит в том, чтобы внутри кадра данных было одинаковое количество строк. Не имеет значения, являются ли первые 8 строк, см. Прикрепленное изображение, пустыми или имеют нулевые значения.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Мне удалось извлечь текст из текстового поля Excel с помощью следующей функции:

extract_Textbox_From_Excel <- function(dir, excel_File_Name)
{
  library(stringr)
  library(xml2)
  setwd(dir)
  file_Name_No_Ext <- str_replace(string = excel_File_Name, pattern = "\\.xlsx", replacement = "")
  file_Name_Zip <- paste0(file_Name_No_Ext, ".zip")
  dir.create(tmp <- tempfile())
  file.copy(from = paste0(dir, excel_File_Name), to = paste0(tmp, "\\", excel_File_Name))
  setwd(tmp)
  file.rename(from = excel_File_Name, to = file_Name_Zip)
  unzip(zipfile = file_Name_Zip)
  setwd(paste0(tmp, "\\xl\\drawings\\"))
  drawing_files <- list.files(pattern = "\\.xml")
  nb_Drawing_Files <- length(drawing_files)
  vector_Text <- character(nb_Drawing_Files)

  for(i in 1 : nb_Drawing_Files)
  {
    xml_Text <- read_xml(drawing_files[i])
    text <- xml_text(xml_Text, trim = TRUE)
    text <- str_replace_all(text, pattern = "\\d{12,200}", replacement = "")
    vector_Text[i] <- text
  }

  vector_Text <- vector_Text[str_detect(vector_Text, "[:alpha:]")]

  return(vector_Text)
}
0 голосов
/ 29 января 2020

Файлы Excel xlsx - это действительно сжатые файлы xml файлов. У меня нет Excel, потому что M @ # $% ^ & S были придурками из-за того, что я не позволил мне восстановить установку в случае сбоя одного из моих жестких дисков в моей системе, которая могла его запустить, но когда я сохранил файл LibreOffice, который имел текстовое поле в нем как файл xlsx на моем Unix поле, я могу затем разархивировать его и увидеть это:

enter image description here

Содержимое Файл Drawing1. xml содержит текст «Это тест», который находится в коробке:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xdr:wsDr xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><xdr:twoCellAnchor editAs="absolute"><xdr:from><xdr:col>6</xdr:col><xdr:colOff>713880</xdr:colOff><xdr:row>9</xdr:row><xdr:rowOff>114840</xdr:rowOff></xdr:from><xdr:to><xdr:col>7</xdr:col><xdr:colOff>777240</xdr:colOff><xdr:row>11</xdr:row><xdr:rowOff>129600</xdr:rowOff></xdr:to><xdr:sp><xdr:nvSpPr><xdr:cNvPr id="0" name="TextShape 1"/><xdr:cNvSpPr txBox="1"/></xdr:nvSpPr><xdr:spPr><a:xfrm rot="1800000"><a:off x="5446440" y="1774080"/><a:ext cx="876240" cy="339840"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln><a:noFill/></a:ln></xdr:spPr><xdr:txBody><a:bodyPr lIns="0" rIns="0" tIns="0" bIns="0"></a:bodyPr><a:p><a:r><a:rPr b="0" lang="en-US" sz="1200" spc="-1" strike="noStrike"><a:latin typeface="Times New Roman"/></a:rPr><a:t>This is a test</a:t></a:r><a:endParaRPr b="0" lang="en-US" sz="1200" spc="-1" strike="noStrike"><a:latin typeface="Times New Roman"/></a:endParaRPr></a:p></xdr:txBody></xdr:sp><xdr:clientData/></xdr:twoCellAnchor></xdr:wsDr>

Я очень сомневаюсь, что в любом из пакетов R есть функции, которые читают файлы Excel, которые предназначен для извлечения текстового содержимого из таких текстовых полей. Но небольшой поиск вызывает расширенное обсуждение, которое может дать вам некоторые подсказки:

https://community.rstudio.com/t/best-r-package-to-create-textboxes-in-ms-excel/947/10

И вот несколько ссылок, которые показывают, как это сделать на разных языках, но с достаточной детализацией, чтобы помочь знающему пользователю:

Как читать текст в текстовом поле, используя openpyxl

https://social.msdn.microsoft.com/Forums/office/en-US/874624c6-c923-4f2f-a60e-333bc9f24949/looking-for-code-to-update-a-textbox-on-a-spreadsheetml-doc-client-using-vbnet-but-i-can-read-and?forum=oxmlsdk

...