Итак, я нашел вот этот замечательный скрипт: http://www.pptfaq.com/FAQ00274_Экспорт_Текста_в_текстовый_файл-_извлечение_текста_из_PowerPoint_-Mac_или_ПК-.htm (Я использую второй)
Импортная часть такова:
For Each oShp In oSld.Shapes 'Loop thru each shape on slide
'Check to see if shape has a text frame and text
If oShp.HasTextFrame And oShp.TextFrame.HasText Then
If oShp.Type = msoPlaceholder Then
Select Case oShp.PlaceholderFormat.Type
Case Is = ppPlaceholderTitle, ppPlaceholderCenterTitle
Print #iFile, "Title:" & vbTab & oShp.TextFrame.TextRange
Case Is = ppPlaceholderBody
Print #iFile, "Body:" & vbTab & oShp.TextFrame.TextRange
Case Is = ppPlaceholderSubtitle
Print #iFile, "SubTitle:" & vbTab & oShp.TextFrame.TextRange
Case Else
Print #iFile, "Other Placeholder:" & vbTab & oShp.TextFrame.TextRange
End Select
Else
Print #iFile, vbTab & oShp.TextFrame.TextRange
End If ' msoPlaceholder
Else ' it doesn't have a textframe - it might be a group that contains text so:
If oShp.Type = msoGroup Then
sTempString = TextFromGroupShape(oShp)
If Len(sTempString) > 0 Then
Print #iFile, sTempString
End If
End If
End If ' Has text frame/Has text
Next oShp
Я уже немного изменил его, так что выходной файл не содержит "Title", "Other Placeholder" и подобного текста, и не вставляет табуляции ("vbTab"). Однако он помещает каждую строку (или абзац) в новую строку в выходном файле.
Вопрос:Как мне указать скрипту выгрузить все «содержимое» из «слайда»/«тела» в одну строку/ячейку?
Я заметил, что этот скрипт (и ни этотhttp://www.pptfaq.com/FAQ00332_Экспорт_Номер_Слайда_и_Текст_Названия_В_Текстовый_файл.htm) демонстрирует это поведение для заголовков, только для «body» или «ppPlaceholderBody».
Я понятия не имею, почему так и в чем разница. Может ли он просто не различать две строки или бюллетени даже в одной форме/поле? Моя цель — иметь последовательную нумерацию строк/ячеек в нескольких .ppt, чтобы одна добавленная строка на слайде 2 не приводила к смещению содержимого слайда 5 на следующую строку.
Спасибо за помощь!
решение1
Моя установка PowerPoint в данный момент не работает, поэтому это не проверено. Но...
Вам просто нужно создать строковую переменную и добавить к ней данные, а затем, когда вы закончите работу со слайдом, скопировать эту строку в ячейку Excel.
Dim slideText As String
For Each oShp In oSld.Shapes 'Loop thru each shape on slide
If Len(slideText) > 0 Then
'--- strip the unneeded trailing CRLF
slideText = Left$(slideText, Len(slideText) - 2)
'--- now copy the string to the appropriate cell in Excel
Else
'--- clear the string for the next slide
slideText = vbNullString
End If
'Check to see if shape has a text frame and text
If oShp.HasTextFrame Then
If oShp.TextFrame.HasText Then
If oShp.Type = msoPlaceholder Then
Select Case oShp.PlaceholderFormat.Type
Case Is = ppPlaceholderTitle, ppPlaceholderCenterTitle
slideText = slideText & "Title:" & vbTab & _
oShp.TextFrame.TextRange & vbCrLf
Case Is = ppPlaceholderBody
slideText = slideText & "Body:" & vbTab & _
oShp.TextFrame.TextRange & vbCrLf
Case Is = ppPlaceholderSubtitle
slideText = slideText & "SubTitle:" & vbTab & _
oShp.TextFrame.TextRange & vbCrLf
Case Else
slideText = slideText & "Other Placeholder:" & _
vbTab & oShp.TextFrame.TextRange & vbCrLf
End Select
Else
slideText = slideText & vbTab & oShp.TextFrame.TextRange
End If ' msoPlaceholder
End If
Else
' it doesn't have a textframe - it might be a group that contains text so:
If oShp.Type = msoGroup Then
sTempString = TextFromGroupShape(oShp)
If Len(sTempString) > 0 Then
slideText = slideText & sTempString & vbCrLf
End If
End If
End If ' Has text frame/Has text
Next oShp
'--- catch the text on the last slide here
If Len(slideText) > 0 Then
'--- strip the unneeded trailing CRLF
slideText = Left$(slideText, Len(slideText) - 2)
'--- now copy the string to the appropriate cell in Excel
End If
Конечно, вы проделываете этот цикл для каждого слайда.
решение2
Я не думаю, что это поможет, но вот это:https://stackoverflow.com/questions/45468824/печать-из-ppt-vba-в-таблицу-Excel пытается сделать что-то подобное, используя Lbound и Ubound для печати в определенных ячейках.
Пока ячейки остаются неизменными в нескольких ppt/xls, я не совсем понимаю, куда деваются строки...
(Хотя он также выбирает определенный файл xls, в то время как я хочу создавать новый файл для каждой распечатки, но это не должно быть проблемой с кодом, который у меня уже есть, который либо создает определенный файл, либо использует имя файла из ppt.)