У меня есть большая таблица в документе Microsoft Word.
К большинству строк, но не ко всем, прикреплен один файл Microsoft Word.
Моя работа заключается в том, чтобы заходить в каждую строку и вручную вводить имя файла, к которому предоставляется вложение.
Есть ли способ автоматизировать эту задачу с помощью пакета R? Например, для каждой строки с прикрепленным файлом автоматически извлекать имя файла и записывать его в поле слева от него?
Вот так выглядит таблица. Файлы находятся в самом правом столбце. В столбце слева я буду вводить имена файлов.
Я пытался импортировать файл docx
с помощью пакета docxtractr
, но он неправильно читает имена файлов. Вместо этого он заменяет их на \s
.
ievs_raw <- read_docx("ievs-raw.docx")
tbls <- docx_extract_all_tbls(real_world)
view(as.data.frame.list(tbls))
Производит следующий вывод с \s
, где должны быть имена файлов, такие как CAP_ATT_H.11.114.docx
и т. д.:
Я не смог понять это с помощью пакета R
, но добрые люди из Microsoft Community Forum
помогли, предоставив очень полезный макрос Visual Basic. Что хорошо в этом, так это то, что он может учитывать случаи, когда в определенной строке есть более 1 вложения.
Sub ObjectNames()
Dim ILS As InlineShape
Dim nObj As Long
Dim strName As String
Dim col As Long
Dim row As Long
With ActiveDocument.Tables(1)
col = .Columns.Count
For row = 1 To .Rows.Count
strName = ""
# loop through all shapes in this row's last cell
# (if there are none, the loop does nothing)
For nObj = 1 To .Cell(row, col).Range.InlineShapes.Count
Set ILS = .Cell(row, col).Range.InlineShapes(nObj)
If Not ILS.OLEFormat Is Nothing Then
# build up a string with as many names as
# there are embedded objects, separated by
# paragraph marks (vbCr)
If nObj > 1 Then strName = strName & vbCr
strName = strName & ILS.OLEFormat.IconLabel
End If
Next nObj
If Len(strName) > 0 Then
.Cell(row, col - 1).Range.Text = strName
End If
Next row
End With
End Sub